Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:使用has\u many:through建模简单的数据_Ruby On Rails_Data Modeling_Has Many Through - Fatal编程技术网

Ruby on rails Rails:使用has\u many:through建模简单的数据

Ruby on rails Rails:使用has\u many:through建模简单的数据,ruby-on-rails,data-modeling,has-many-through,Ruby On Rails,Data Modeling,Has Many Through,我对宠物和兽医有一套非常简单的数据要求 主人可以养很多宠物 宠物可以有一个主人 宠物可以由(属于)许多兽医治疗 兽医可以治疗(有很多)宠物 所有者和兽医都是使用STI的用户的子类 下面是一些代码: class Owner < User has_many :pets has_many :veterinarians, :through => :pets end class Veterinarian < User attr_accessible :clinic_na

我对宠物和兽医有一套非常简单的数据要求

  • 主人可以养很多宠物
  • 宠物可以有一个主人
  • 宠物可以由(属于)许多兽医治疗
  • 兽医可以治疗(有很多)宠物
所有者
兽医
都是使用STI的
用户
的子类

下面是一些代码:

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
类所有者:宠物
结束
兽医级<用户
可访问属性:诊所名称
你有很多宠物吗
有很多:主人,:到=>:宠物
结束
类Pet
以下是失败的规范:

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
它“有各种各样的兽医”做什么
o=所有者。制造!(:email=>'owner1@gmail.com')
v1=兽医。制造!(:email=>'vet_1@gmail.com')
v2=兽医。制造!(:email=>'vet_2@gmail.com')
p=Pet.make!(:name=>fluffy')

o、 宠物您必须在宠物
和兽医
之间使用联接表。我们称之为治疗

class Treatment < ...
...
  belongs_to :pet
  belongs_to :veterinarian
...
end

class Veterinarian < ...
...
  has_many :treatments
  has_many :pets, through: :treatments
...
end

class Pet < ...
...
  has_many :treatments
  has_many :veterinarians, through: :treatments
...
end
class处理<。。。
...
属于:宠物
属于:兽医
...
结束
职业兽医<。。。
...
有很多治疗方法吗
有很多宠物,通过治疗
...
结束
宠物类。。。
...
有很多治疗方法吗
有很多:兽医,通过治疗
...
结束

您必须在宠物和兽医之间使用联接表。我们称之为治疗

class Treatment < ...
...
  belongs_to :pet
  belongs_to :veterinarian
...
end

class Veterinarian < ...
...
  has_many :treatments
  has_many :pets, through: :treatments
...
end

class Pet < ...
...
  has_many :treatments
  has_many :veterinarians, through: :treatments
...
end
class处理<。。。
...
属于:宠物
属于:兽医
...
结束
职业兽医<。。。
...
有很多治疗方法吗
有很多宠物,通过治疗
...
结束
宠物类。。。
...
有很多治疗方法吗
有很多:兽医,通过治疗
...
结束