Использование динамических искателей для указания NOT NULL - PullRequest
2 голосов
/ 01 июля 2010

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

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

Widget.find_all_by_color('blue')

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

Widget.find_all_by_color(nil)

Но как мне сделать

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

?

Ответы [ 4 ]

3 голосов
/ 01 июля 2010

Два способа в зависимости от того, насколько конкретно вы хотите быть:

# 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

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

Приветствия

2 голосов
/ 01 июля 2010
Widget.find(:all, :conditions => "color IS NOT NULL")
1 голос
/ 01 июля 2010

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

Widget.all(:conditions => "color IS NOT NULL")
1 голос
/ 01 июля 2010

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

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