你有这样的模特:
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.named(name).date_range(start,start + 2)
但是如果名称或开头是nil我不想执行named_scope之类的 name = nil EventDate.named(name).date_range(start,start + 2)
是否可以在named_scope内设置条件?
感谢
答案 0 :(得分:1)
是, 只是做:
unless name.blank?
在lambda里面。 通过这种方式,您还可以将默认查询设置为 如果没有给出参数,则执行
答案 1 :(得分:0)
Named_scope并不打算处理这种逻辑。它旨在帮助您设置可能经常出现的某些条件。
调用者应根据可用的params调用适当的named_scope,即在调用named_scope之前添加一个条件。例如:
if name.blank?
EventDate.date_range(start, end)
else
EventDate.named(name).date_range(start, end)
end
话虽如此,从技术上讲,你可以在范围内做类似的事情。为named_scope创建的Lambda需要返回一个哈希,你可以把它放入其中(但请不要这样做!)并且如果name为空则返回空哈希。例如:
named_scope :named, lambda { | name |
name.blank? ? {} : { :conditions => ["name like ?", "%#{ name }%"] }
}