我必须建立关系模型:
参与有很多传递
在测试中有一件奇怪的事情:
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
时,如果通过关系模型进行查询,我会得到空集合 - 一切正常。
在开发环境中,两个查询都得到相同的结果。
答案 0 :(得分:0)
很可能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)
如果你包括你的测试,它可能会更清楚地解决这个问题。