0

我有三个模型:用户、站点和护照。

用户和网站彼此拥有并属于彼此,而护照是带有几个额外列的连接模型。

我已经尝试了以下两种方法:

1.

FactoryGirl.define do
  factory :passports do
    association :site, factory: :site
    association :user, factory: :user
    access_token 'mock_token'
  end
end

2.

FactoryGirl.define do
  factory :passports do
    access_token 'mock_token'
  end
end

无论哪种方式,我都在使用它:

let(:site) { FactoryGirl.create :site }
let(:user) { FactoryGirl.create :user }
let(:site_user) { FactoryGirl.create :site_user, site: site, user: user }
let(:passport) { FactoryGirl.create :passport, user: user, site: site }

请不要问为什么同时存在 site_user 和 passport..这需要一段时间来解释。

谢谢!

最大限度

4

2 回答 2

0

所以,回顾一下:

# Sites
has_many :passports
has_many_and_belongs_to :users, :through => :passport

# User
has_many :passports
has_many_and_belongs to :sites, :through => :passport

# Pasport
belongs_to :site
belongs_to :user
# has a few other things going on as wel

认为你应该能够做类似的事情

FactoryGirl.define do
  factory :user do
    # details go here
  end

  factory :site_with_users do
    users { |site| [site.association(:user), site.association(:user)] }
  end
end

然后你应该可以做

let( :site_with_users ) { FactoryGirl.create :site_with_users }

不过这些都是猜测,希望对你有所帮助。

于 2012-11-19T22:28:23.270 回答
0

OMFG 这太蠢了……

切换到 Factory.define :passport do |f| 语法使它工作......

消除一个半小时生产力的好方法

于 2012-11-19T22:42:36.963 回答