如果我有一个带有lambda的作用域,它接受一个参数,这取决于参数的值,我可能知道不会有任何匹配项,但我仍然希望返回一个关系,而不是一个空数组:
scope :for_users, lambda { |users| users.any? ? where("user_id IN (?)", users.map(&:id).join(',')) : [] }
我真正想要的是一个"none"方法,与"all"相反,它返回一个仍然可以链接的关系,但会导致查询短路.
如果我有一个带有lambda的作用域,它接受一个参数,这取决于参数的值,我可能知道不会有任何匹配项,但我仍然希望返回一个关系,而不是一个空数组:
scope :for_users, lambda { |users| users.any? ? where("user_id IN (?)", users.map(&:id).join(',')) : [] }
我真正想要的是一个"none"方法,与"all"相反,它返回一个仍然可以链接的关系,但会导致查询短路.
Rails 4中现在有一个"正确"的机制:
>> Model.none
=> #<ActiveRecord::Relation []>