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 }%"] }
}