2012-01-21 27 views
0

これら3つのモデルをRails3で定義しました。複数の関連付けを含むアクティブレコードを作成するにはどうすればよいですか?

class User < ActiveRecord::Base 
    has_many :questions 
    has_many :answers 

class Question < ActiveRecord::Base 
    belongs_to :user 
    has_many :answers 

class Answer < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :question 

私はこのようなRSpecのを書いた:私は、この行が間違っていると思い

Failures: 

    1) Answer user associations should have the right associated question 
    Failure/Error: @answer.question.should_not be_nil 
     expected: not nil 
      got: nil 

describe "user associations" do 
    before :each do 
    @answer = @user.answers.build question: @question 
    end 

    it "should have the right associated user" do 
    @answer.user.should_not be_nil 
    end 

    it "should have the right associated question" do 
    @question.should_not be_nil 
    @answer.question.should_not be_nil #FAIL!! 
    end 

しかし、私は常に次のエラーを取得する

@answer = @user.answers.build question: @question 

しかし、回答オブジェクトをどのように構築すればよいですか?

更新:みんなありがとう、私はこのように書くことが必要ですが見つかりました:私は明示的に@userインスタンスを保存すると

Factory.define :user do |user| 
    user.user_name "junichiito" 
end 

Factory.define :question do |question| 
    question.title "my question" 
    question.content "How old are you?" 
    question.association :user 
end 

Factory.define :answer do |answer| 
    answer.content "I am thirteen." 
    answer.association :user 
    answer.association :question 
end 
+0

このように見えます。あなたは 'デバッガ 'を追加しようとしましたか? –

+0

'@ question'インスタンスはどこに作成しますか?そのコードを表示できますか? – rdvdijk

+0

私はデバッガを一度も使用しておらず、使用方法も知らない。あなたは学ぶべきあらゆる資源を知っていますか? –

答えて

1

:ここ

require 'spec_helper' 

describe Answer do 
    before :each do 
    @user = Factory :user 
    asker = Factory :user, :user_name => 'someone' 
    @question = Factory :question, :user => asker 
    end 

    describe "user associations" do 
    before :each do 
     @answer = Factory :answer, :user => @user, :question => @question 
    end 

    it "should have the right associated user" do 
     @answer.user.should_not be_nil 
    end 

    it "should have the right associated question" do 
     @answer.question.should_not be_nil 
    end 
    end 
end 

はスペック/ factories.rbです仕様はもはや失敗しません。ここに私のバージョンがあります:

require 'spec_helper' 

describe Answer do 
    before :each do 
    @user = User.new 
    @user.save! 
    @question = @user.questions.build 
    @question.save! 

    @answer = @user.answers.build question: @question 
    @question.answers << @answer 
    end 

    it "should have the right associated user" do 
    @answer.user.should_not be_nil 
    end 

    it "should have the right associated question" do 
    @question.should_not be_nil 
    @answer.question.should_not be_nil # SUCCESS! 
    end 
end 
+1

ありがとうございますが、エラーがありましたので、私はあなたの答えを編集しました。 –

関連する問題