我必须用关系建模:
参与有很多路过
在测试中A得到了一个奇怪的东西:
participation.passings
#<ActiveRecord::Associations::CollectionProxy []>
participation.passings.to_sql
"SELECT \"passings\".* FROM \"passings\" WHERE \"passings\".\"participation_id\" = $1 ORDER BY \"passings\".\"datetime\" ASC"
但是:
Passing.where(participation: participation)
#<ActiveRecord::Relation [#<Passing id: 8, chip_id: "0000001", datetime: "2016-05-05 07:28:53", detector_id: 1, event_id: 1, participation_id: 1, is_valid: false, location_id: nil, created_at: "2016-05-05 07:20:55", updated_at: "2016-05-05 07:20:55", gun_time: 0.0, split_time: 0.0, time: 0.0, raw_passing_id: 8, enabled: true>...]
我不明白为什么当我调用 participation.passings
时,如果我通过关系模型进行查询,我会得到空集合 - 一切正常。
在开发环境中,两个查询得到相同的结果。
最佳答案
很可能 participation.passings
正在提取缓存数据,而不是从数据库查询重新加载关联。
要了解为什么会发生这种情况,假设您有以下条件:
participation = Participation.create
new_passing = Passing.create(participation_id: participation.id)
participation.passings # Still an empty collection
participation.passings(true).pluck(:id) == [new_passing.id] # Now returns a collection including `new_passing`
# Can also reload the collection
participation.reload
participation.passings.pluck(:id) == [new_passing.id] # Should also be true
要修复,请尝试通过将 true
传递给 passings
关联来强制重新加载:
participation.passings(true)
如果您包括您的测试,它可能会更清楚地说明这个问题。
关于ruby-on-rails - ActiveRecord 在测试中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37044944/