ruby on rails - 在创建记录时添加end_time

时间:2017-11-17 22:54:23

标签: ruby-on-rails ruby

我尝试使用ends_at列创建一条记录,例如假设将created_at值添加到其中5分钟:

Class Post < ApplicationRecord
  after_create :set_end_time

  private
    def set_end_time
      self.ends_at = self.created_at + 5.minutes
    end
end

这会将ends_at列保存为数据库中的null

3 个答案:

答案 0 :(得分:2)

你解雇了after_create。它在 Rails 调用SQL INSERT命令后被触发。因此,当对象保存到数据库时,您已经设置ends_at,并且不会再次保存它。初始化ends_at的对象不会去任何地方,然后从内存中清除。

before_create替换你的钩子,它应该为你做到这一点。

答案 1 :(得分:0)

您忘记保存记录

def set_end_time
  self.ends_at = self.created_at + 5.minutes
  save
end

答案 2 :(得分:0)

一种难以实现的方法是在迁移时创建行时设置默认值 举个例子 change_column_default:posts,:end_time,“current_timestamp +(5 ||'minutes'):: interval”如果你使用postgres作为例子。

但只有在你确定这不会很快改变的情况下才这样做。 如果是,那么设置一个带有自定义setter的before_create钩子是可行的方法(只需确保你的字段是datetime类型)