0

ユーザー、サイト、パスポートの 3 つのモデルがあります。

users と sites は互いに多くのものを持ち、それらに属していますが、passports はいくつかの余分な列を持つ結合モデルです。

私は次の両方を試しました:

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| 構文はそれを機能させました...

1時間半の生産性を吹き飛ばす素晴らしい方法

于 2012-11-19T22:42:36.963 に答える