2017-05-04 71 views
0

我已盡我所能,按照本網站上的文檔和類似問題,沒有任何快樂。我試圖創建一個儀式,其中有許多邀請:工廠女孩 - 創建相關記錄

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和我去探索,我可以看到一個新的ceremo ny已經創建,並有3個新的邀請與該儀式的ID。當我撥打電話

ceremony.invites 

我收到一個空關係。當我致電

Invite.where(ceremony: ceremony.id) 

我收到[inv_1,inv_2,inv_3]。當我打電話

inv_1.ceremony 

我收到了儀式,但再次

ceremony.invites 

返回一個空的關係。我不知道爲什麼邀請是用正確的儀式ID創建的,但是儀式顯然沒有邀請。任何幫助是極大的讚賞。

+0

當您定義「Invite」工廠時,您是否添加了與儀式的關聯? – iskvmk

+0

我不認爲我需要,因爲我明確指出他們,但是我有 – Mark

回答

1

在創建ceremony時,數據庫中沒有invites。由於Rails的緩存數據庫查詢,除非invites陣列將保持空:

  • 您手動添加邀請:ceremony.invites = [inv_1, ...]
  • 您添加的邀請權創建ceremony(在工廠或調用工廠時)或
  • 您將重新加載ceremony或其invites關係。

我會選擇第二個選項,並在調用預期之前添加ceremony.reloadceremony.invites(true)

+0

答案是沿着正確的路線。在執行測試之前,我必須手動調用每個對象:before do [inv_1,inv_2,inv_3等..]。然後是禮物,它正在拾起它們。 – Mark

+1

對,你從來不會在你的測試中調用'儀式',因此整個記錄都沒有生成。你可以在before塊中調用每個對象,另一個選項是使用'let!'而不是'let'(注意砰的一聲)。 – spickermann

+0

今天我瞭解了!非常感謝 – Mark