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

この特定のシナリオでは、使用する必要があります: 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 に答える
1

を使用after_createすると、データベースに保存された後にその値を設定できます。代わりに使用できますbefore_create

于 2013-10-05T14:42:51.043 に答える
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 に答える