2017-05-04 4 views
0

私はこのサイトのドキュメントや同様の質問に喜んで従うことを最善にしました。 I "mはに関連した招待状を作成しようとしているが、私の仕様では工場の女の子 - 関連するレコードを作成する

class Invite < ApplicationRecord 
    belongs_to :ceremony 
end 

invite.rb

ceremony.rb

class Ceremony < ApplicationRecord 
    has_many :invites, dependent: :destroy 
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を見ることができますその儀式のIDで3つの新しい招待状が作成されました。私が電話すると

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はデータベースにありません。あなたが手動で招待を追加

  • ceremony.invites = [inv_1, ...]
  • ceremony(工場出荷時や工場を呼んで)または
  • を作成する権利ときは、招待状を追加Railsのキャッシュデータベースを照会しているのでない限り invites配列は空のままになります
  • ceremonyまたはそのinvitesリレーションをリロードします。

私は2番目のオプションを選択し、予想を呼び出す前にceremony.reloadまたはceremony.invites(true)を追加します。

+0

答えは正しい行に沿っていた。テストを実行する前に手動で各オブジェクトを呼び出さなければなりませんでした:before [inv_1、inv_2、inv_3など]。それからceremony.reloadとそれがそれらを拾っていた。 – Mark

+1

そうです、あなたのテストでは決して 'セレモニー(ceremony) 'を呼び出さないので、レコード全体が生成されませんでした。前のブロックで各オブジェクトを呼び出すことができます。別のオプションは、 'let'の代わりに' let! 'を使うことです(バグに注意してください)。 – spickermann

+0

今日私はletについて学んだ!どうもありがとう – Mark

関連する問題