Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用动态查找器指定NOTNULL_Sql_Ruby On Rails_Activerecord_Dynamic Finders - Fatal编程技术网

Sql 使用动态查找器指定NOTNULL

Sql 使用动态查找器指定NOTNULL,sql,ruby-on-rails,activerecord,dynamic-finders,Sql,Ruby On Rails,Activerecord,Dynamic Finders,我经常想使用动态查找器来指定NOTNULL。所以 这项工作: Widget.find_all_by_color('blue') Widget.find_all_by_color(nil) 这项工作: Widget.find_all_by_color('blue') Widget.find_all_by_color(nil) 但我该怎么办呢 SELECT * FROM `widgets` WHERE `color` IS NOT NULL; ?没有那么优雅,但这应该可以: Widget.

我经常想使用动态查找器来指定NOTNULL。所以

这项工作:

Widget.find_all_by_color('blue')
Widget.find_all_by_color(nil)
这项工作:

Widget.find_all_by_color('blue')
Widget.find_all_by_color(nil)
但我该怎么办呢

SELECT * FROM `widgets` WHERE `color` IS NOT NULL;

没有那么优雅,但这应该可以:

Widget.find(:all, :conditions => "'color' IS NOT NULL")
试试这个:

Widget.all(:conditions => "color IS NOT NULL")

两种方式取决于您想要的具体程度:

# in your model
class Widget < ActiveRecord::Base
  # first way
  named_scope :coloured, {:conditions => ["color IS NOT NULL"]}
  # second way
  named_scope :not_null, lambda{|*args| (field=args.first ? {:conditions => ["#{field} is not null",field]} : {}) } }
end

# in your controller
@coloured_widgets = Widget.coloured.all           # using first way
@coloured_widgets = Widget.not_null(:colour).all  # using second way
在您的模型中 类Widget[“颜色不为空”]} #第二条路 命名的_作用域:not_null,lambda{|*args}(field=args.first?{:conditions=>[“{field}不为null”,field]}:{} 结束 #在控制器中 @彩色小部件=Widget.colored.all#使用第一种方式 @彩色小部件=小部件。非空(:color)。全部使用第二种方式 我希望有帮助


干杯

是的,我知道所有这些,谢谢各位。我想用动态查找器是没有办法的。Kandaboggu得到了答案,因为他的答案缩短了5个字符:-D