【发布时间】:2011-06-20 03:50:56
【问题描述】:
如果我有一个带有 lambda 的范围并且它需要一个参数,根据参数的值,我可能知道不会有任何匹配,但我仍然想返回一个关系,而不是一个空数组:
scope :for_users, lambda { |users| users.any? ? where("user_id IN (?)", users.map(&:id).join(',')) : [] }
我真正想要的是一个“none”方法,与“all”相反,它返回一个仍然可以链接的关系,但会导致查询被短路。
【问题讨论】:
-
如果你只是让查询,运行它会返回一个关系:User.where('id in (?)', []).class=> ActiveRecord::Relation.您是否试图完全避免查询?
-
正确。如果我知道不可能有任何匹配项,理想情况下,可以完全避免查询。我只是将它添加到 ActiveRecord::Base: "def self.none; where(:id => 0); end" 似乎可以满足我的需要。
-
> 您是否要完全避免查询?完全有道理,有点蹩脚,我们需要为此打 DB
标签: ruby-on-rails activerecord relation