当我更新单个记录上的属性时,我想更新rails(3.1)模型中的所有记录。
与self.update_attribute(:global_order => 1)一样,然后在保存之前或之后,想要更新所有其他记录以更新其global_order(1,2,3,4)。
现在on after after_save回调我陷入了一个递归循环,跳过回调的方式去?如果global_order中的任何内容看起来很奇怪,我希望应用程序抛出异常。
或者有任何3.1宝石可以解决我的问题。
after_save :set_global_order
def set_global_order
@products = self.class.all(:order => :global_order)
@products.sort! {|a,b| a.global_order <=> b.global_order}
@products.reverse!
@products.each_with_index do |p, index|
p.update_attributes!({:global_order => index + 1})
end
end
答案 0 :(得分:0)
不确定是否有宝石,但你绝对可以通过以下考虑重构:
...
def set_global_order
products = self.class.order('global_order DESC')
products.each_with_index do |p, index|
p.update_column(:global_order, index + 1)
end
end