2016-11-29 2 views
0

Я с трудом выяснить, что значит эта ошибка именно:Путаница Изобилует 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 
+1

Я думаю, вам нужно включить ваши модели, чтобы мы могли видеть валидации, чтобы получить хороший ответ на этот вопрос. – Brad

+0

Для вашего второго вопроса вы можете использовать черты для создания вопросов с различными параметрами: https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#traits – David

ответ

0

Забыл ответить на этот вопрос.

Главная проблема/вопрос:

  • почему проверка для таблицы присоединиться неудачу/возвращение ошибки ниже:

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

Как я и подозревал, что это из-за nil Значение для обеих ассоциаций в QuizQuestion завод:

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

Решение должно было избавиться от значения nil.

0

Я думаю, вам нужно добавить опцию class_name к вашему Взаимоотношения nships, я уверен, что 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 не имеет смысла afaict, вы переопределяете some_questions сразу после его определения.

+0

Это опечатка. Сейчас исправит и посмотрит, что произойдет. – Uzzar

+0

Реальный ответ был о опции 'class_name'. Помогло ли это с вашей проблемой? – Brad

Смежные вопросы