无法使用before_create更新所有行

时间:2014-10-28 22:03:11

标签: ruby-on-rails

我需要一个before_update回调,它只会将列中的值增加2,大于正在创建的新行的值。但是,我在引用现有表中的列属性和我正在插入的行的列属性之间感到困惑。

我使用以下参考: 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

1 个答案:

答案 0 :(得分:0)

如果您需要将每个记录的rgt大于或等于self.rgt增加2,您可以使用:

  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

的值