我尝试使用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
答案 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类型)