0

我正在尝试使我的到期日期填充到 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 而不是日期。

4

3 回答 3

1

通过使用after_create您在将其保存在数据库中之后设置该值。你可以before_create改用。

于 2013-10-05T14:42:51.043 回答
1

对于这种特殊情况,您应该使用 : before_save set_expiration_date,或者只是再次调用 save (这将是多余的):

def set_expiration_date
  self.expiration =  Date.today + 30.days
  save
end

您当前使用的在 Base.save 之后调用尚未保存的新对象(不存在记录)。

after_create api 文档

于 2013-10-05T14:43:50.983 回答
0

您需要在保存前设置该值,或者在设置后保存该值。我推荐前者:

before_create :set_expiration_date 

def set_expiration_date
  self.expiration =  Date.today + 30.days
end

您可以将此方法绑定到很多回调, after_create 发生在将行保存到数据库之后,因此您的行无效。

于 2013-10-05T14:43:54.573 回答