使用动态查找器指定NOT NULL

时间:2010-06-30 20:18:31

标签: sql ruby-on-rails activerecord dynamic-finders

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

这有效:

Widget.find_all_by_color('blue')

这有效:

Widget.find_all_by_color(nil)

但我该怎么办

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

4 个答案:

答案 0 :(得分:3)

取决于您希望的具体方式,有两种方式:

# 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

我希望它有所帮助。

干杯

答案 1 :(得分:2)

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

答案 2 :(得分:1)

不太优雅,但这应该有效:

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

答案 3 :(得分:1)

试试这个:

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