我有一个Ruby on Rails 3应用程序,它使用ancestry 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
不仅更改对象上的位置,还会更改所有对象的位置后代对象也是如此。这会导致所有后代对象的位置不可靠并导致不必要的数据库调用。
有没有办法防止这种情况发生,或者这是预期的行为?
非常感谢任何帮助;谢谢!
答案 0 :(得分:0)
似乎已经根据此issue report知道此问题,并且pull request正在解决此问题。作为一个短期修复,我按照Brendon的建议发布了pull请求,并通过声明自定义范围绕过了错误,从而绕过了存在错误的scope_changed?
方法。
希望这有助于将来节省一些时间和白发。