0

私は次のモデルを持っています(sort_timestamp日時です):

class Post < ActiveRecord::Base
  [snip attr_accessible]
  acts_as_nested_set
  after_create :set_sort_timestamp

  private
  def set_sort_timestamp
    self.sort_timestamp = self.created_at
  end
end

https://github.com/collectiveidea/awesome_nested_setを使用しています。このコードは設定しませんsort_timestamp。私は何を間違っていますか?

4

1 に答える 1

2

before_createここで行っていることの要点を見逃していない限り、行が作成されたときに保存したい場合は、おそらく探しています。それ以外の場合はself.save、メソッドに追加する必要がありますが、追加のデータベース呼び出しが発生するためbefore_create、より適切なオプションである可能性があります。

(基本的に、以前行っていたフローは、モデルが作成されてデータベースに保存され、オブジェクトがその属性sort_timestampを次のように変更することcreated_atでした。これはデータベースのコミット後であり、メモリ内でのみ実行されます(したがって、コードの後半で別の方法で永続化しない限り、永続化されます)。

編集:実際には、レコードが作成される前にcreated_atが設定されない可能性があるため、これはおそらく機能しません。いくつかのオプション:

self.save1)メソッドの最後に2)を追加します。時間が完全に同じである必要がない場合に使用after_create します。または、3)移行にデフォルト値を追加してみてください:Railsでcreated_at値をデフォルトとして使用する方法Time.nowsort_timestampcreated_at

于 2012-08-07T17:41:36.170 に答える