В чем разница между named_scope и named_scope + лямбда

В чем разница между операторами кода named_scope и named_scope + lambda Ruby on Rails?

named_scope :with_avatar, :conditions => ['avatar IS NOT NULL']

а также

named_scope :date_from, lambda { |date| { :conditions => ['created_at >= ?', DateTime.strptime(date, '%d.%m.%Y')] } }

person Maestro    schedule 21.08.2010    source источник


Ответы (1)


С помощью лямбды вы можете указать аргументы для области.

В приведенном выше случае вы могли бы сказать

Model.with_avatar и Model.date_from("10.08.2010"), однако вы не можете сказать, например, Model.with_avatar(false)

В этом случае вам нужно быть несколько осторожным с аргументами лямбда: если вы не передадите аргумент в date_from, это, вероятно, не сработает. Один «обходной путь» — использовать |*date| , проверьте, было ли оно передано, и установите для него значение по умолчанию, если это не так.

person Zaki    schedule 21.08.2010