2012-11-20 93 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,從頭開始重新開始。

相關問題