2010-06-30 1 views
2

Я очень часто хочу использовать динамические искатели, чтобы указать NOT NULL. Так что ...Использование динамических искателей для указания NOT NULL

это работает:

Widget.find_all_by_color('blue') 

это работает:

Widget.find_all_by_color(nil) 

Но как я могу сделать

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

?

ответ

1

Попробуйте это:

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

Да, я знал все это, спасибо, ребята. Я думаю, что нет никакого способа сделать это с помощью динамического искателя. KandadaBoggu получает ответ, потому что его 5 символов короче: -D –

1

Не совсем так элегантно, но это должно работать:

Widget.find(:all, :conditions => "'color' IS NOT NULL") 
2
Widget.find(:all, :conditions => "color IS NOT NULL") 
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 

Надеюсь, это поможет.

Cheers