为什么会产生无限循环?

时间:2012-11-20 21:29:55

标签: ruby-on-rails activerecord

我正在尝试将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

2 个答案:

答案 0 :(得分:2)

您的assign_pos方法实际上正在初始化self.pos,因此after_initialize条件会再次调用assign_pos,并初始化self.pos ... < / p>

答案 1 :(得分:1)

“self.order ...”实际上是从数据库中选择对象,并调用initialize。初始化之后,它调用assign_pos,它调用highest_pos,它会重新启动所有内容。