我很难弄清楚这个错误究竟意味着什么:
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
我的猜测是,Quiz工厂中的关联旁边的nil
与错误有关。我试图阅读FactoryGirl文档,看看如何创建正确的关联,但我不明白某些事情。例如:
我应该只在工厂中为联接表(问题)创建关联吗?
更重要的是,既然我想首先创建一个问题,然后告诉问题它有哪些选项,我该如何在工厂实现这个目标?
谢谢!
编辑:
class Option < ApplicationRecord
has_many :quizzes
has_many :questions, through: :quizzes
end
class Question < ApplicationRecord
has_many :quizzes
has_many :options, through: :quizzes
end
class Some::QuizQuestion < ApplicationRecord
belongs_to :questions
belongs_to :options
end
答案 0 :(得分:0)
我认为您需要在关系中添加class_name
选项,我很确定Rails并不像您期望的那样处理Some
命名空间。
例如:
class Some::QuizQuestion < ApplicationRecord
belongs_to :some_questions, class_name: 'Some::Question'
belongs_to :some_questions, through: :some_quiz_questions
end
此外,第二个belongs_to
没有任何意义,您在定义它之后立即重新定义some_questions
。
答案 1 :(得分:0)
忘记发布此问题的解决方案。
主要问题/问题是:
为什么连接表的验证失败/返回错误如下:
* question - Validation failed: Option must
exist, Question must exist (ActiveRecord::RecordInvalid)
我怀疑,这是因为QuizQuestion工厂中两个关联旁边的nil
值:
FactoryGirl.define do
factory :quiz, class: 'Question' do
option nil
question nil
end
end
解决方案是摆脱nil
值。