2014-10-28 49 views
0

我需要一個before_update回調函數,該函數只是將列中的值增加2倍,大於創建的新行的值。不過,我在引用現有表中的列屬性和我插入的行的列屬性之間感到困惑。無法使用before_create更新所有行

我使用下面的參考: http://apidock.com/rails/ActiveRecord/Relation/update_all

class Region < ActiveRecord::Base 
    before_create :update_tree 

    def update_tree 
    Region.where('rgt >= ?', self.rgt).update_all(rgt: rgt+2) 
    end 
end 

回答

0

如果你需要增加每個大於或等於self.rgt 2記錄的RGT,你可以使用:

def update_tree 
    Region.where('rgt >= ?', self.rgt).update_all("rgt = rgt + 2") 
    end 

這將生成一個查詢:

UPDATE "regions" SET rgt = rgt + 2 WHERE (rgt >= X) 

(X是self.rgt的值)

+0

但是,謝謝你的結果是錯誤「參數的錯誤數目(2爲1)」。我能否澄清一下,self.rgt是寫入之前新記錄的rgt值。 – Dercni 2014-10-28 23:04:06

+0

我已經更新了答案。我假設你需要將每個區域的rgt增加2,這是你正在嘗試做什麼? – mohameddiaa27 2014-10-28 23:08:21