def positioning
tasks = Painting.all.order(:position)
increment = false
tasks.each do |t|
if !increment && t.position == self.position
increment = true
t.position += 1
t.save
elsif increment
t.position += 1
t.save
end
end
end
此方法用于before_save
回调,并且在添加新绘画时可以使用,但是在增加其他对象的位置时做错了,后来在我要更新任何对象时这是一个问题。
使用update_attribute的版本1
paintings = Painting.where(:position >=self.position)
paintings.each do |painting|
painting.update_attributes(:position, painting.position + 1)
end
版本2使用哈希
paintings = Painting.where(:position >=self.position)
paintings.each do |painting|
paintingHash = Hash.new
paintingHash["position"]=painting.position+1
painting.update(paintingHash)
end
该说明适用于版本2
第1行找到位置高于当前位置的所有绘画
第2行通过选定的绘画开始引人入胜
第3行创建用于更新的新哈希
第4行将值赋给哈希中等于原始位置+1的变量
第5行执行更新
第6行结束迭代
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句