免责声明:我对铁杆比较陌生。
我的模型中有一个自定义方法,我想查询。该方法称为“active?”,返回一个布尔值。我真正想做的是创建以下形式的ActiveRecord查询:
Users.where(:active => true)
当然,当我按原样运行上面时,我得到一个“列不存在”,所以我的问题如下:
如何进行上述操作,但是对于模型上的自定义方法而不是实际的DB列?
答案 0 :(得分:1)
而不是使用主动?方法,你有一个范围来帮助找到匹配的项目。
像这样......
def self.active
joins(:parent_table).where(:archived => false).where("? BETWEEN parent_table.start_date AND parent_table.end_date ", Time.now)
end
而且,你应该能够做到这一点
def active?
User.active.exists?(self)
end
如果您想将此范围重用于实例测试。
答案 1 :(得分:0)
一种简单的方法是将select
方法与现有模型方法一起使用。
Users.select{|u| u.active}
这将返回一个数组,因此您将无法在其上使用Active Record Query方法。要将结果作为ActiveRecord_Relation
对象返回,可以使用where
函数查询具有匹配ID的实例:
class User < ActiveRecord::Base
def self.active
active_array = self.select{|r| r.active?}
active_relation = self.where(id: active_array.map(&:id))
return active_relation
end
end