我正在尝试使用rails应用程序填充我的到期日期:
我这样添加了我的专栏:
class AddExpirationToPost < ActiveRecord::Migration
def change
add_column :posts, :expiration, :date
end
end
在我的模特中,我补充道:
after_create :set_expiration_date
def set_expiration_date
self.expiration = Date.today + 30.days
end
但是当我创建帖子时,它会在到期字段而不是日期中保存nil。
答案 0 :(得分:1)
通过使用after_create
,您将该值设置为保存在数据库中后。您可以改为使用before_create
。
答案 1 :(得分:1)
对于这种特殊情况,您应该使用:before_save set_expiration_date
,或者只是再次调用save(这将是多余的):
def set_expiration_date
self.expiration = Date.today + 30.days
save
end
您正在使用的那个是在Base.save之后调用尚未保存的新对象(不存在记录)。
答案 2 :(得分:0)
您需要在保存之前设置值,或者在设置之后保存该值。我推荐前者:
before_create :set_expiration_date
def set_expiration_date
self.expiration = Date.today + 30.days
end
你可以把这个方法绑定到很多回调,after_create在行保存到数据库之后发生,所以你的行无效。