私はペットや獣医に関係する非常に単純なデータ要件のセットを持っています。
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は伝統的な意味での結合テーブルではないことを理解しています。Owner
has_many Pet
s、Pet
belongs_to:owner、Pet
has_and_belongs_to_many sのようなスキーマを使用する必要がありますVeterinarian
か?
ありがとう!