我在模型中有一个方法,它通过计算子项和执行各种魔法来返回一个数字。它工作但我需要在where方法中使用它:
Product.joins(:owner).where('owner.budget > 0')
owner.budget
是所有者模型上的方法。反正有没有在上面使用它?
由于
答案 0 :(得分:1)
如果此方法(owner.budget
)执行复杂计算和/或不直接映射到数据库列,则不能在where
子句中使用它。但是,你可以这样做:
Product.joins(:owner).to_a.select{|p| p.owner.budget > 0 }
请注意,这会将所有产品加载到内存中并在应用程序中对其进行过滤。
答案 1 :(得分:0)
不,如果owner.budget
是所有者模型上的实例方法。您必须在所有者类中创建范围或类方法。
假设budget
是owners
表的一列,您可以在所有者模型中定义此类方法
def self.with_budget
where('budget > 0')
end
然后就这样称呼
Product.joins(:owner).with_budget