如何使用ActiveRecord一起添加日期列和整数列?

时间:2013-06-05 19:04:31

标签: ruby activerecord ruby-on-rails-3.2

我在数据库中有两列名为purchase_date,另一列名为lifetime。我试图过滤结果,以便在给定当前纳税年度时仅显示未超过其生命周期的资产。

我试过

Asset.where("? < DATE_ADD(purchase_date,INTERVAL lifetime YEAR) AND  purchase_date >= ?",Date.new(2012,1,1),Date.new(2012,1,1))

但是,我意识到如果它确实有效,这将与MySQL相关联,如果这只是用于我的完整应用程序,这很好。但是,我想要一些与数据库无关的东西,特别是因为这是针对Sqlite进行测试的。带有此查询的Sqlite给出了以下异常:

  

ActiveRecord :: StatementInvalid:SQLite3 :: SQLException:near lifetime

如何以数据库无关的方式在我的sql语句中的日期列中添加整数列?

更新

我和Squeel一起玩过,但我认为它无法发挥作用。有可能检测到适配器并将其作为基础。

1 个答案:

答案 0 :(得分:1)

为什么不添加:expires_at字段?您可以设置:before_save挂钩,以确保它自动与您的:lifetime字段保持同步。

before_save :set_expiration_date

scope :not_expired, where("expires_at > ?", DateTime.now)

def set_expiration_date
  return unless purchase_date.changed? || lifetime.changed?
  self.expires_at = purchase_date + lifetime.years
end