我有一个 Ruby on Rails 3 应用程序,它使用祖先gem 为模型提供分层树结构,并结合acts_as_list gem 在层次结构的每个级别内提供显式定位。
class Obj < ActiveRecord::Base
...
has_ancestry
acts_as_list scope: [:ancestry]
...
end
此外,我在对象上使用以下方法来更改对象的父对象:
# Credit to the author of the ancestry gem for the code.
def move_to_child_of(reference_instance)
transaction do
remove_from_list
self.update_attributes!(:parent => reference_instance)
add_to_list_bottom
save!
end
end
在以下情况下,一切都按预期工作:
- 更改同一父对象中对象的位置。
- 当对象没有后代时更改对象的父级。
我遇到的问题是,更改也有后代的对象的父级acts_as_list
不仅会改变对象的位置,还会改变所有后代对象的位置。这会导致所有后代对象的位置动作/不可靠,并导致不必要的数据库调用。
有没有办法防止这种情况发生,或者这是预期的行为?
任何帮助将不胜感激; 谢谢!