ご存知のように、質問を保存する前にアソシエーションを作成する必要があります。
は、私はあなたがこのような何かをしたいかもしれないと思う:
FactoryGirl.define do
factory :question do
...
answers { [association(:answer, answers_count: 2)] }
end
end
または
は、おそらく
build_list
方法は助けることができる:
after(:build) do |q, ev|
build_list(:answer, ev.answers_count, question: q)
end
私はそれがafter(:build)
で作業を取得することができました。 after(:build)
の場合はdocsとそのコールバックの順序を参照してください。
私はそれが、この設定でモンゴで動作するようになった:
#spec/models/question_spec.rb
describe Question do
let!(:question){create :question}
it 'should work', :focus do
expect(question).to be_valid
puts question.inspect
puts question.answers.inspect
end
end
#spec/factories/questions.rb
FactoryGirl.define do
factory :question do
text "Enunciado de la pregunta"
transient do
answers_count 2
end
after(:build) do |q, ev|
create_list(:answer, ev.answers_count, question: q)
end
end
factory :answer do
text "Enunciado de la respuesta"
end
end
#models/question.rb
class Question
include Mongoid::Document
include Mongoid::Attributes::Dynamic
field :text, type:String
has_many :answers
validates_presence_of :answers
end
#models/answer.rb
class Answer
include Mongoid::Document
include Mongoid::Attributes::Dynamic
field :text, type:String
belongs_to :question
end
私のテストアウトプットは、このでした:試みの多くの後
Run options: include {:focus=>true}
#<Question _id: 590a20ef8a681843088580bb, text: "Enunciado de la pregunta">
[#<Answer _id: 590a20ef8a681843088580ba, text: "Enunciado de la respuesta", question_id: BSON::ObjectId('590a20ef8a681843088580bb')>, #<Answer _id: 590a20ef8a681843088580bc, text: "Enunciado de la respuesta", question_id: BSON::ObjectId('590a20ef8a681843088580bb')>]
.
Finished in 0.16217 seconds (files took 2.87 seconds to load)
1 example, 0 failures
これはなぜ 'validates_presence_of'で動作するのでしょうか?さらに重要なのは、バリデーターが 'length:{minimum:1}'よりも優れている理由ですか? –
更新:とにかく、あなたの例題を試してみましたが、 'create:question'に' Answers can be be blank'をつけてクラッシュしています。意味があるなら、私はmongoを使用しません。 –
さて、 'length:{minimum:1}'は動作するはずですが、私はそれを確認しましたが、私のテストでは早く動作しませんでした。おっとっと。だから、あなたは '答え'工場を持っていますか?あなたはそのコードを投稿できますか? –