我已尽力遵循本网站上的文档和类似问题而不感到高兴。我正在尝试创建一个有很多邀请的仪式:
ceremony.rb
class Ceremony < ApplicationRecord
has_many :invites, dependent: :destroy
end
invite.rb
class Invite < ApplicationRecord
belongs_to :ceremony
end
在我的规范中,我试图创建与仪式相关的邀请如下:
let(:ceremony) { FactoryGirl.create(:ceremony) }
let(:nom_1) { FactoryGirl.create(:nominee, award: award) }
let(:inv_1) { FactoryGirl.create(:invite, email: nom_1.email, ceremony: ceremony) }
let(:inv_2) { FactoryGirl.create(:invite, ceremony: ceremony) }
let(:inv_3) { FactoryGirl.create(:invite, ceremony: ceremony) }
before do
User.delete_all
end
it 'should return invites not assigned a nominee' do
binding.pry
expect(award.available_nominees).to include(inv_2, inv_3)
end
当测试遇到binding.pry并且我去探索时,我可以看到已经创建了一个新的仪式,以及3个带有该仪式ID的新邀请。当我打电话
ceremony.invites
我收到一个空的关系。当我打电话
Invite.where(ceremony: ceremony.id)
我收到[inv_1,inv_2,inv_3]。当我打电话
inv_1.ceremony
我再次收到仪式
ceremony.invites
返回一个空关系。我不知道为什么邀请是用正确的仪式ID创建的,但仪式显然没有邀请。非常感谢任何帮助。
答案 0 :(得分:2)
在创建ceremony
时,数据库中没有invites
。由于Rails缓存数据库查询,invites
数组将保持为空,除非:
ceremony.invites = [inv_1, ...]
,ceremony
时(在工厂或致电工厂时)或ceremony
或其invites
关系。我会选择第二个选项,并在调用期望之前添加ceremony.reload
或ceremony.invites(true)
。