2012-11-20 71 views
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 
+0

这并不是做到这一点。让数据库增加值。唯一的缺点是,在记录保存之前,您不会提前知道新值。 – 2012-11-20 21:43:28

+0

此外,它不是一个增量,因为用户之间可能已经改变了pos值 – pitosalas

回答

2

assign_pos方法实际上是初始化self.pos,所以因为after_initialize条件,assign_pos被再次呼吁,并初始化self.pos ...

+0

为什么downvote? – alestanis

+0

ahah你也是个受害者... – MrYoshiji

1

“self.order ...”实际上是从数据库中选择对象,然后调用initialize。初始化之后,它调用assign_pos,它调用highest_pos,从头开始重新开始。

相关问题