我的父类有时不会在孩子的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
为迭代children
:
def update_something children.each do |child| end end
测试失败 - 循环将执行一次(并将返回单个子节点的数组 - 第一次 child
创建).
否则,我可以放任何代码,只要它没有提及children
它会工作.这就像对孩子的呼叫导致关联加载错误的东西.
强制重新加载修复它:
def update_something children(true).each do |child| end end
但这很hacky,如果可能的话我宁愿修复root问题.
这是我的错误,还是铁轨错误(如果有的话,我可以做些什么来解决这个问题)?
我怀疑这很重要,但这是一个使用sqlite3的测试环境.虽然如果我在单个开发控制台会话中创建和测试记录,它也会在开发环境中失败.