在我的rails app中,我在Kid
模型中定义了一个基于Kids
DB字段的计算。方法如下:
def flip_date
self.dob.advance(months: 10)
end
我想在我的控制器中使用它,因为我有一个方法,我按如下方式定义:
new_kids = Kid.where(discharge_date: nil).where('flip_date > ?', Date.current.advance(year: 1).beginning_of_year)
但是我一直收到以下错误:
SQLite3::SQLException: no such column: flip_date: SELECT "kids".* FROM "kids" WHERE "kids"."discharge_date" IS NULL AND (flip_date < '2017-01-01')
关于如何使这项工作的任何想法?感谢所有帮助!
答案 0 :(得分:2)
如果您真的想使用模型方法,请查看http://apidock.com/rails/v4.0.2/ActiveRecord/QueryMethods/select
对于你的情况:
new_kids = Kid.where(discharge_date: nil).select{|k| k.flip_date > Date.current.advance(year: 1).beginning_of_year}
但select方法在返回最终结果之前占用内存中的每个对象。因此,我建议使用normal where子句而不是flip_date考虑dob(这是数据库中的一列)。
喜欢这个
new_kids = Kid.where(discharge_date: nil).where('dob > ?', <date criteria>)