我正在研究用户的模型,在该模型中,用户将根据sort_order对其进行排序。 我想要实现的目标是 如果我们为新用户设置相同的sort_order或更新现有用户,则具有相同sort_order的所有用户都会递增。 例如 我们有3种用户类型及其sort_order,如下所示
黄金,sort_order为1
使用sort_order为2的钻石
Platinum,sort_order为3
将Gold更新为2会导致Diamond增加到3,Platinum增加到4。
有没有办法在Rails中执行此操作?
答案 0 :(得分:0)
当然,您听说过after_save吗?
您可以定义每次保存对象时作为回调运行的方法。在这种情况下,您可能只希望在排序顺序发生变化时运行它。
下面是一些伪代码 - 这会检查具有相同after_save
的其他模型并递增它们。请注意,这将级联 - class Foo
after_save :update_sort_orders, if: :sort_order_changed?
def update_sort_orders
Foo.where(sort_order: sort_order).where.not(id: id).each do |foo|
foo.update_attributes(sort_order: foo.sort_order + 1)
end
end
end
也将在增加的模型上调用,因此最终应更新需要更新的所有内容。
{{1}}
答案 1 :(得分:0)
此问题现已解决。 我做的是我先检查是否存在具有相同sort_order的记录。
def check_for_duplicates(sort_order)
foo_list = Foo.all.sort_by { |hash| hash[:sort_order].to_i }
foo_list.each do |foo|
if foo['sort_order'] == sort_order
foo.update_attributes(sort_order: sort_order+ 1)
sort_order = foo['sort_order']
end
end
end
`
希望这有助于某人!!!!! :)