私はペットや獣医に関係する非常に単純なデータ要件のセットを持っています。
owner多くのことができますpets- A
petは1つを持つことができますowner - A
petは(belongs_to)多くの人が扱うことができますveterinarians - 扱うことができます( have_many
veterinarian)pets
Ownerとは両方ともSTIを使用するVeterinarianサブクラスです。User
ここにいくつかのコードがあります:
class Owner < User
has_many :pets
has_many :veterinarians, :through => :pets
end
class Veterinarian < User
attr_accessible :clinic_name
has_many :pets
has_many :owners, :through => :pets
end
class Pet < ActiveRecord::Base
attr_accessible :name, :date_of_birth, :species, :breed, :gender, :neutered
belongs_to :owner
belongs_to :veterinarian
end
そして、これが失敗している仕様です:
it "has various veterinarians" do
o = Owner.make!(:email => 'owner1@gmail.com')
v1 = Veterinarian.make!(:email => 'vet_1@gmail.com')
v2 = Veterinarian.make!(:email => 'vet_2@gmail.com')
p = Pet.make!(:name => 'fluffy')
o.pets << p
v1.pets << p
v2.pets << p
o.pets.should have(2).records
o.veterinarians.should have(2).records
end
物事は、make!機械工の固定具の交換を使用することと関係があります。オブジェクトを工場で作成するだけです。
障害は最後の行で発生します。o.veterinariansには1つのレコードしかないことがわかりました。pet飼い主と獣医の関係を築くたびにまったく新しいペットを作りたくないので、aは伝統的な意味での結合テーブルではないことを理解しています。Ownerhas_many Pets、Petbelongs_to:owner、Pethas_and_belongs_to_many sのようなスキーマを使用する必要がありますVeterinarianか?
ありがとう!