Ruby on rails 如何对两列之和进行计算?
在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发票
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