【问题标题】:Using method in a where clause Rails Ruby Active Record在 where 子句中使用方法 Rails Ruby Active Record
【发布时间】:2016-07-06 09:59:11
【问题描述】:

我想知道是否可以使用模型实例方法作为 where 子句查询。我是说。我有一个定义了方法的模型学校

class School < ActiveRecord::Base

  def my_method
    users.where(blablabla).present?
  end

end

是否有可能得到类似的东西:

School.all.where(my_method: true)

我知道我可以这样做:

School.all.map{|x| x if x.my_method}

但与 where 查询相比,这种方式在性能上的损失很大。此外,我正在搜索的返回是一个 ActiveRecord Relation 并且 map 返回一个数组。

更新:

还有另一种方法:

School.all.joins(:users).where("users.attribute = something")

但这并不完全符合我的要求,原因有几个。

提前致谢

【问题讨论】:

  • 你要通过rails范围吗,请通过它..这可能是你正在寻找stackoverflow.com/questions/4869994/…
  • 如果你能说明你的方法应该达到什么目的,你的问题可能会更容易理解。你应该为他们解释你的设计决定。您是在尝试评估方法并将其结果发送到“where”,还是尝试为“where”动态创建条件。

标签: ruby-on-rails activerecord where-clause


【解决方案1】:

我真的不知道你的模型之间的关系。

但是 where 子句获取键值的散列。 因此,您可以例如以某种散列形式返回用户的 ID,然后使用它。

def my_method
  {user_id: users.where(blablabla).ids}
end

并使用它:

School.all.where(my_method)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    相关资源
    最近更新 更多