2014-10-28 25 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