ruby-on-rails – Rails关联未正确加载
我的父类有时不会在子节点的after_save回调中加载它的所有子节点.
我有两个型号: class Parent < ActiveRecord::Base has_many :children def update_something # explained below end end class Child < ActiveRecord::Base belongs_to :parent after_save :tell_parent_to_update def tell_parent_to_update parent.update_something end end 我有一个测试我正在运行它,它只检查2件事. parent.children.count和parent.children.length.两者都应该是4.我意识到计数有时是不同的,但(据我所知)它不应该在这里. 如果我定义update_something只是迭代孩子: def update_something children.each do |child| end end 测试失败 – 循环将执行一次(并将返回单个子节点的数组 – 创建的第一个子节点). 否则,我可以放任何代码,只要它没有提到孩子,它会工作.这就像对孩子的呼叫导致关联加载错误的东西. 强制重新加载修复它: def update_something children(true).each do |child| end end 但这很hacky,如果可能的话我宁愿修复root问题. 这是我的错误,还是铁轨错误(如果有的话,我可以做些什么来解决这个问题)? 我怀疑这很重要,但这是一个使用sqlite3的测试环境.虽然如果我在单个开发控制台会话中创建和测试记录,它也会在开发环境中失败. 解决方法
在黑暗中刺,但你可能需要
inverse_of ,我认为相关的对象存储在同一个内存块中,而不是标准方法创建的不同块:
#app/models/parent.rb class Parent < ActiveRecord::Base has_many :children,inverse_of: :parent ... end #app/models/child.rb class Child < ActiveRecord::Base belongs_to :parent,inverse_of: :children ... end 根据我自己的经验,我发现inverse_of允许您调用其他模型中的关联数据.例如,调用不带inverse_of的parent.update_something会导致错误(如果未显式定义父级),或者必须再次构建父对象. 有一个good write-up here. – 如果没有帮助,我会删除答案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |