代码之家  ›  专栏  ›  技术社区  ›  Uzzar

工厂女孩的困惑比比皆是

  •  0
  • Uzzar  · 技术社区  · 8 年前

    我很难弄清楚这个错误的确切含义:

        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 测验工厂中的关联旁边与错误有关。我试图阅读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
    
    2 回复  |  直到 8 年前
        1
  •  0
  •   Brad    8 年前

    我认为您需要添加 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 就在定义它之后。

        2
  •  0
  •   Uzzar    8 年前

    忘记发布这个问题的解决方案。

    主要问题是:

    • 为什么连接表的验证失败/返回以下错误:

       * question - Validation failed: Option must 
         exist, Question must exist (ActiveRecord::RecordInvalid)  
      

    正如我所怀疑的,这是因为 nil

    FactoryGirl.define do
      factory :quiz, class: 'Question' do
        option nil
        question nil
      end
    end 
    

    解决办法是摆脱 价值