将过期日期添加到rails模型会保存nil而不是date

时间:2013-10-05 14:37:43

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

我正在尝试使用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。

3 个答案:

答案 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之后调用尚未保存的新对象(不存在记录)。

after_create api doc

答案 2 :(得分:0)

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

before_create :set_expiration_date 

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

你可以把这个方法绑定到很多回调,after_create在行保存到数据库之后发生,所以你的行无效。