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
回调,当我添加一个新绘画时可以正常工作,但是它做错了会增加其他对象的位置,以后当我想更新任何对象时这是一个问题
答案 0 :(得分:1)
使用update_attribute
的版本1paintings = 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行结束迭代
答案 1 :(得分:0)
试试这个?
{{1}}
这使您可以有效地仅循环您想要增加的那些。既然你已经完成了第一行的所有任务,那么我的成本就不会太高了。
我也不完全确定你的职位是基于0还是基于1。我的代码基于0,但如果不是,你需要调整索引行。