Я с трудом выяснить, что значит эта ошибка именно:Путаница Изобилует FactoryGirl: has_many через
An error occurred in a `before(:suite)` hook.
Failure/Error: FactoryGirl.lint
FactoryGirl::InvalidFactoryError:
The following factories are invalid:
* question - Validation failed: Option must
exist, Question must exist (ActiveRecord::RecordInvalid)
Эти заводы:
# question has many options through quiz
FactoryGirl.define do
factory :question, class: 'Question' do
option "What color are your eyes"
end
end
# option has many questions through quiz
FactoryGirl.define do
factory :option, class: 'Option' do
option "blue"
end
end
# JoinTable
FactoryGirl.define do
factory :quiz, class: 'Quiz' do
option nil
question nil
end
end
Я думаю, что nil
право рядом с ассоциациями в фабрике Quiz есть что-то общее с ошибкой. Я попытался прочитать документы FactoryGirl, чтобы узнать, как создавать правильные ассоциации, но я не понимаю некоторых вещей. Например:
Я должен создать ассоциации на фабрике только для таблицы соединений (вопрос)?
Что еще более важно, поскольку я хочу сначала задать вопрос, а затем рассказать о том, какие у него есть варианты, как я могу достичь этого на фабрике?
Спасибо!
Edit:
Вариант Модель:
class Option < ApplicationRecord
has_many :quizzes
has_many :questions, through: :quizzes
end
Вопрос Модель
class Question < ApplicationRecord
has_many :quizzes
has_many :options, through: :quizzes
end
Quiz Модель
class Some::QuizQuestion < ApplicationRecord
belongs_to :questions
belongs_to :options
end
Я думаю, вам нужно включить ваши модели, чтобы мы могли видеть валидации, чтобы получить хороший ответ на этот вопрос. – Brad
Для вашего второго вопроса вы можете использовать черты для создания вопросов с различными параметрами: https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#traits – David