Ruby on rails 如何对两列之和进行计算?

Ruby on rails 如何对两列之和进行计算?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,在Rails应用程序的Invoice类中,我需要找到所有过期的发票 我只有两个数据库列,date(这是一个类型datetime字段)和days(这是一个类型integer字段) 这就是我得到的: class Invoice < ActiveRecord::Base def self.overdue where("date + days_allowed < ?", Date.today) end end class发票

在Rails应用程序的
Invoice
类中,我需要找到所有过期的发票

我只有两个数据库列,
date
(这是一个类型
datetime
字段)和
days(这是一个类型
integer
字段)

这就是我得到的:

class Invoice < ActiveRecord::Base

  def self.overdue
    where("date + days_allowed < ?", Date.today)
  end

end
class发票
不过,它既没有抛出错误,也没有返回我需要的关系

有没有更好的方法对两个数据库列求和,然后对其进行计算


感谢您的帮助。

这取决于您在ActiveRecord中使用的数据库适配器类型;例如,使用PostgreSQL,您可以向任何DATETIME(又称时间戳)添加一个间隔,它使用非常自然的语法。
时间戳“2014-01-26”+间隔“3天”=时间戳“2014-01-29”
但是,SQL本身有一个
DATEADD()
函数,您当然可以使用它。你在使用什么数据库


这里有一个wiki链接以获取更多信息。

这取决于您在ActiveRecord中使用的数据库适配器类型;例如,使用PostgreSQL,您可以向任何DATETIME(又称时间戳)添加一个间隔,它使用非常自然的语法。
时间戳“2014-01-26”+间隔“3天”=时间戳“2014-01-29”
但是,SQL本身有一个
DATEADD()
函数,您当然可以使用它。你在使用什么数据库


这里有一个wiki链接以获取更多信息。

这取决于您在ActiveRecord中使用的数据库适配器类型;例如,使用PostgreSQL,您可以向任何DATETIME(又称时间戳)添加一个间隔,它使用非常自然的语法。
时间戳“2014-01-26”+间隔“3天”=时间戳“2014-01-29”
但是,SQL本身有一个
DATEADD()
函数,您当然可以使用它。你在使用什么数据库


这里有一个wiki链接以获取更多信息。

这取决于您在ActiveRecord中使用的数据库适配器类型;例如,使用PostgreSQL,您可以向任何DATETIME(又称时间戳)添加一个间隔,它使用非常自然的语法。
时间戳“2014-01-26”+间隔“3天”=时间戳“2014-01-29”
但是,SQL本身有一个
DATEADD()
函数,您当然可以使用它。你在使用什么数据库


这里有一个wiki链接,以获取更多信息。

虽然有一些特定于数据库的sql黑客可以做到这一点,而且其他答案也建议,但我会以不同的方式做到这一点。。。您对名为“date\u due”的属性感兴趣,但该属性不存在。我会成功的

  • 添加一个迁移,将“发票到期日”字段添加到表中
  • 在模型中,添加一个before_save钩子,如下所示:
保存前:计算到期日 def计算到期日 发票到期日=您的其他日期+允许天数 结束
  • 执行某些操作以触发所有现有发票以使其保存,并更新新字段。例如,从控制台:
发票.所有.每个都有| i| i、 拯救 结束 这个答案依赖于ActiveSupportGem在Rails中为您提供的一些日期魔法。使用ActiveSupport,您可以进行各种日期计算,如:

4.days.from_now my_birthday - 7.days 从现在起4天 我的生日-7.5天
等等。这就是上面的“days\u allowed.days”方法所做的。

虽然有一些特定于数据库的sql黑客可以做到这一点,而且其他答案都建议,但我会用另一种方式来做。。。您对名为“date\u due”的属性感兴趣,但该属性不存在。我会成功的

  • 添加一个迁移,将“发票到期日”字段添加到表中
  • 在模型中,添加一个before_save钩子,如下所示:
保存前:计算到期日 def计算到期日 发票到期日=您的其他日期+允许天数 结束
  • 执行某些操作以触发所有现有发票以使其保存,并更新新字段。例如,从控制台:
发票.所有.每个都有| i| i、 拯救 结束 这个答案依赖于ActiveSupportGem在Rails中为您提供的一些日期魔法。使用ActiveSupport,您可以进行各种日期计算,如:

4.days.from_now my_birthday - 7.days 从现在起4天 我的生日-7.5天
等等。这就是上面的“days\u allowed.days”方法所做的。

虽然有一些特定于数据库的sql黑客可以做到这一点,而且其他答案都建议,但我会用另一种方式来做。。。您对名为“date\u due”的属性感兴趣,但该属性不存在。我会成功的

  • 添加一个迁移,将“发票到期日”字段添加到表中
  • 在模型中,添加一个before_save钩子,如下所示:
保存前:计算到期日 def计算到期日 发票到期日=您的其他日期+允许天数 结束
  • 执行某些操作以触发所有现有发票以使其保存,并更新新字段。例如,从控制台:
发票.所有.每个都有| i| i、 拯救 结束 这个答案依赖于ActiveSupportGem在Rails中为您提供的一些日期魔法。使用ActiveSupport,您可以进行各种日期计算,如:

4.days.from_now my_birthday - 7.days 从现在起4天 我的生日-7.5天
等等。这就是上面的“days\u allowed.days”方法所做的。

虽然有一些特定于数据库的sql黑客可以做到这一点,而且其他答案都建议,但我会用另一种方式来做。。。您对名为“date\u due”的属性感兴趣,但该属性不存在。我会成功的

  • 添加一个迁移,将“发票到期日”字段添加到表中
  • 在模型中,添加一个before_save钩子,如下所示:
保存前:计算到期日 def计算到期日 发票到期日=您的其他日期+
def self.overdue
  where("DATE_ADD(date, INTERVAL days_allowed DAY) < ?", Date.today)
end