factory_girl has_many: через с проверками - PullRequest
1 голос
/ 24 сентября 2010

У меня есть следующие модели:

class Activity < ActiveRecord::Base
  has_many  :clientships, :dependent => :destroy
  has_many  :clients, :through => :clientships
end

class Clientship < ActiveRecord::Base
  belongs_to  :client
  belongs_to  :activity

  validates_presence_of :client_id
  validates_presence_of :activity_id, :unless => :new_record?
end

class Client < ActiveRecord::Base
  has_many  :clientships
  has_many  :activities, :through => :clientships
end

Я не могу создать: фабрику действий при получении ошибки проверки " Деятельность не может быть пустой ".

Мои фабрики выглядят так:

Factory.define :activity do |a|
  a.association :staff, :factory => :user
  a.clientships { |cs| [cs.association :clientship] }
end

Factory.define :clientship do |cs|
  cs.association(:client)
end

Factory.define :client do |c|
  c.first_name {Factory.next(:name)}
  c.last_name {Factory.next(:name)}
end

Я получаю сообщение об ошибке при запуске этой фабрики в своей спецификации: @activity = Factory(:activity)

ПОЖАЛУЙСТА, ПОМОГИТЕ!

1 Ответ

3 голосов
/ 24 сентября 2010

То, что я всегда делаю в подобных случаях, выглядит примерно так:

Factory.define :activity do |a|
  #whatever attributes
end

Factory.define :clientship do |cs|
  cs.association(:client)
  cs.association(:activity)
end

Factory.define :client do |c|
  c.first_name {Factory.next(:name)}
  c.last_name {Factory.next(:name)}
end

Так что в своих тестах / спецификациях я использую

Factory :clientship

Возможно, это не так чисто, но многобольше смысла для меня ... Однако я не уверен, что создание таких отношений из таблицы соединений - это хорошая идея.

И, вообще, я предпочитаю создавать ассоциации на фабриках из belongs_to сторона, так как в конце это становится менее проблематичным для меня.

...