我想在数据库查询中使用实例方法(?)。如果我的班级中有一个实例方法,检查字段是否为非零
class Foo < ActiveRecord::Base
def is_completed?
return !!(field_1 && field_2 && field_3)
end
end
我可以在AR查询中以某种方式使用它吗?我想做像
这样的事情Foo.where(is_completed?: true)
我能想到的另一个选择是在模型中保留一个单独的列is_completed
并根据is_completed?
进行更新,但这似乎相当迂回。
答案 0 :(得分:2)
您可以使用范围:
class Foo < ActiveRecord::Base
scope :is_completed?, lambda { where.not(field1: [nil, ""], field2: [nil, ""], field3: [nil, ""]) }
end
对于整数/浮点数/非字符串类型,只检查nil
(而不是""
),否则您将得到一个空的关系。
然后你可以像这样使用它。
Foo.is_completed?
答案 1 :(得分:0)
使用范围进行这类查询,检查非空字段。
scope :is_completed?, ->{ where.not("field1 is null and field2 is null and field3 is null") }
使用,
Foo.is_completed?