Rails自定义模型方法在哪里查询

时间:2016-09-11 05:10:14

标签: ruby-on-rails activerecord activemodel

在我的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')

关于如何使这项工作的任何想法?感谢所有帮助!

1 个答案:

答案 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>)