Ruby on rails ActiveRecord::Persistence#重新加载不会重新加载对象,除非它们被访问

Ruby on rails ActiveRecord::Persistence#重新加载不会重新加载对象,除非它们被访问,ruby-on-rails,activerecord,rspec,Ruby On Rails,Activerecord,Rspec,我有一个方法可以创建一个或多个新的ActiveRecord对象并将其作为数组返回: class Parent < ActiveRecord::Base has_many :children def build_children 5.times do |i| Child.create end return children end end 我认为这会失败,在第一次调用中返回5个孩子的数组,在第二次调用中返回10个。相反,它两次都返回原来

我有一个方法可以创建一个或多个新的ActiveRecord对象并将其作为数组返回:

class Parent < ActiveRecord::Base

  has_many :children

  def build_children
    5.times do |i|
      Child.create
    end
    return children
  end

end
我认为这会失败,在第一次调用中返回5个孩子的数组,在第二次调用中返回10个。相反,它两次都返回原来的5

添加重新加载也不会使其失败!事实上,它似乎失败的唯一方式是,如果我在重新加载后以某种方式访问返回的数组,比如打印它:

# this fails, as expected
it "should return the previous batch of children if build_children called twice" do
  parent = Parent.create
  children = parent.build_children
  parent.reload
  puts children
  more_children = parent.build_children
  children.should == more_children
end
更让人困惑的是,此命令序列在控制台中的工作方式与预期相同:

  parent = Parent.create
  children = parent.build_children
  parent.reload
  more_children = parent.build_children
  # => [ array of 10 children ]

reload
在rspec示例组中的行为是否不同?访问实例化的AR对象有什么特别之处?

您如何设置您的分数变量和more_分数变量?哦,对不起,那是个错误。现在一切都正常了吗?不,这只是我的净化版代码中的一个输入错误。有什么理论吗?抓住救命稻草,但是孩子们=父母。孩子们+=父母。孩子们。大小。应该==10
  parent = Parent.create
  children = parent.build_children
  parent.reload
  more_children = parent.build_children
  # => [ array of 10 children ]