【发布时间】:2012-04-23 01:18:45
【问题描述】:
我有一组非常简单的关于宠物和兽医的数据要求。
- 一个
owner可以有多个pets - 一个
pet可以有一个owner - 一个
pet可以被(belongs_to)许多veterinarians处理 - 一个
veterinarian可以治疗(have_many)pets
Owner 和 Veterinarian 都是使用 STI 的 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 不是传统意义上的连接表,因为我不想每次创建所有者和兽医之间的关系时都创建一个全新的宠物。我应该使用更像Owner has_many Pets、Pet belongs_to :owner 和 Pet has_and_belongs_to_many Veterinarians 的架构吗?
谢谢!
【问题讨论】:
标签: ruby-on-rails data-modeling has-many-through