Rails:祖先+ Acts_as_List宝石在改变父对象时不按预期工作



我有一个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不仅改变了对象上的位置,但也改变了所有后代对象的位置。这将导致所有后代对象的位置不可靠,并导致不必要的数据库调用。

是否有任何方法可以防止这种情况的发生,或者这是预期的行为?

任何帮助将非常感激;谢谢!

根据这个问题报告,似乎这个问题已经知道了,并且有一个拉取请求来解决它。作为短期修复,我遵循Brendon的建议发布到拉请求,并通过声明一个自定义作用域来绕过bug,从而绕过了存在bug的scope_changed?方法。

希望这能帮助将来的人节省一些时间和白发。

相关内容

  • 没有找到相关文章

最新更新