has_many через с ошибкой Factory Girl при запуске тестов

Я изо всех сил пытался настроить отношения has_many через Factory Girl. У меня есть две модели курса и категории, курс может иметь много категорий, у меня есть два курса и категории фабрик.

У меня есть эти три модели

class Course < ActiveRecord::Base
  extend FriendlyId
  friendly_id :title, use: [:slugged, :history]

  has_many :categorisations
  has_many :categories, :through=> :categorisations 
  belongs_to :partner
  belongs_to :user
 # validates_uniqueness_of :title
  validates :title, presence: true
  # validates :start_date, presence: true
  # validates :duration, presence:true
  # validates :state, presence:true
  validates :categories, length: { minimum: 1 , message:"please select"}
  validates :partner_id, presence: true, allow_nil: false
end
end

class Category < ActiveRecord::Base
  has_many :categorisations 
  has_many :courses, :through=> :categorisations
  belongs_to :user
#validation 
  validates :name, presence: true , uniqueness: { scope: :name }
end

class Categorisation < ActiveRecord::Base
  belongs_to :category
  belongs_to :course
end

Заводы

FactoryGirl.define do 
  factory :course do |f|
    f.title "Introduction to Accounting short course"
    f.start_date "2014-02-27 00:00:00"
    f.duration "10 WEEKS ONLINE"
    partner 
    categorisation
   end
   # join table factory - :category
  factory :categorisation do |categorisation|
    categorisation.association :course
    categorisation.association :category
   end   
end

Категория Фабрика в отдельном файле

FactoryGirl.define do 
  factory :category do |f|
    f.name "Marketing"
  end
end

Ошибка, которую я получаю при запуске тестов:

У партнера есть действующая фабрика для курса Ошибка/ошибка: expect(FactoryGirl.create(:course)).to be_valid ActiveRecord::RecordInvalid: Ошибка проверки: имя уже занято

Что я хочу сделать, так это создать курс с одной или несколькими категориями, я не уверен, что я здесь делаю неправильно, но мне нужно, чтобы фабрика курсов была действительной. Я знаю, что моя фабрика категорий действительна.

Похоже, он дважды пытается создать категорию, поэтому выдает ошибку, что имя уже существует.


person Andrew_tainton    schedule 25.04.2014    source источник
comment
есть ли проверки для Course#title ? Думаю проблема в вашем Course. Можете ли вы предоставить errors модели вашего курса?   -  person xlembouras    schedule 25.04.2014
comment
Тесты для модели без ассоциаций она проходит, я не думаю, что это название   -  person Andrew_tainton    schedule 25.04.2014
comment
есть ли валидатор уникальности для названия?   -  person xlembouras    schedule 25.04.2014
comment
Нет, я только что подтвердил присутствие, я закомментировал валидатор беспокойства.   -  person Andrew_tainton    schedule 25.04.2014
comment
Это может быть дубликат ниже: [stackoverflow.com/questions/14162344/ [1]: stackoverflow.com/questions/14162344/   -  person Ryan-Neal Mes    schedule 25.04.2014
comment
См. stackoverflow.com /вопросы/23185326/   -  person Danny    schedule 25.04.2014


Ответы (1)


Вы создаете курс дважды, один раз вверху, а затем еще раз, когда создаете категоризацию. Поскольку вы не ссылаетесь на ранее созданный курс, FactoryGirl создаст для вас новый. Если вы поместите разрыв перед строкой соединения, вы увидите, что уже есть, и снова, когда в коде ассоциации.

Вам нужно добавить специфику курса в строку в присоединении

categorisation.association :course

e.g.

categorisation.association (:course, title: "Introduction to Accounting short course")

(извините, синтаксис может быть немного неверным, но вы поняли)

person Michael Moulsdale    schedule 28.04.2014
comment
Извините, просто вопрос, добавить ли это в мою фабрику категорий? - person Andrew_tainton; 29.04.2014