выполнение named_scoped только при наличии существующих параметров - PullRequest
0 голосов
/ 23 мая 2010

Привет, есть такая модель:

class EventDate < ActiveRecord::Base
belongs_to :event

named_scope :named, lambda { | name | { 
    :joins => { :event => :core}, 
    :conditions => ["name like ?", "%#{ name }%"] 
  }}

  named_scope :date_range, lambda { | start, length | { 
    :conditions => ["day >= ? AND day <= ?", start, date + (length || 30) ]
  }}

работает правильно, если я запускаю name = "ba" start = Date.today EventDate.name (name) .date_range (начало, начало + 2)

Но если имя или начало ноль, я не хочу выполнять named_scope как имя = ноль EventDate.name (name) .date_range (начало, начало + 2)

Можно ли установить условие внутри named_scope?

спасибо

Ответы [ 2 ]

1 голос
/ 23 мая 2010

Да, просто сделай:

unless name.blank?

Внутри лямбды. Таким образом, вы также можете установить запрос по умолчанию выполнить, если параметр не задан

0 голосов
/ 23 мая 2010

Named_scope не был предназначен для обработки такой логики. Он был создан, чтобы помочь вам установить определенные условия, которые могут часто возникать.

Вызывающий должен вызывать соответствующий named_scope в зависимости от доступных параметров, то есть просто добавить условие перед вызовом named_scope. Например:

if name.blank?
  EventDate.date_range(start, end)
else
  EventDate.named(name).date_range(start, end)
end

При этом технически вы могли бы сделать нечто подобное в самой области видимости. Лямбда, созданная для named_scope, должна вернуть хеш, и вы можете поставить в него свой чек (но, пожалуйста, не делайте этого!) И вернуть пустой хеш, если name пусто. Например:

named_scope :named, lambda { | name |
  name.blank? ? {} : { :conditions => ["name like ?", "%#{ name }%"] }
}
...