0

ActiveRecord モデル (pos) のフィールドを、値 1+ これまでの最高値に割り当てようとしています。以下は、どちらのバージョンでも、無限ループを生成します。理由がわかりません。見えますか?

class Question < ActiveRecord::Base
  attr_accessible :text, :pos, :data_type, :active
  has_many :values
  belongs_to :program

  after_initialize :assign_pos

  def row_label
    text
  end

  def self.highest_pos
    self.order("pos DESC").first
  end

  def assign_pos
    puts "********* #{Question.highest_pos + 1}" # option 1
    self.pos = Question.highest_pos + 1 # option 2
  end

end
4

2 に答える 2

2

あなたのassign_posメソッドは実際に初期化self.posしているので、after_initialize条件のために、assign_pos再び呼び出されて初期化されますself.pos...

于 2012-11-20T21:34:58.497 に答える
1

「self.order...」は、実際にはデータベースからオブジェクトを選択し、initialize を呼び出しています。初期化後、assign_pos が呼び出され、highest_pos が呼び出され、すべてが最初からやり直されます。

于 2012-11-20T21:32:28.003 に答える