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...”实际上是从数据库中选择对象,并调用初始化。初始化后调用assign_pos,它调用highest_pos,一切重新开始。

于 2012-11-20T21:32:28.003 回答