我的数据库存储了一个人员列表,以及他们拥有的宠物。
rails generate model Pet name:string species:string
rails generate model Owner name:string
has_many :pets
belongs_to :owner
然后我运行rake db:migrate
,然后进入Rails控制台试一试。
Owner.create name: "Sarah"
Owner.create name: "David
santos = Pet.new name: "Santos L Halper", species: "Dog"
现在我想告诉Rails谁拥有桑托斯。我如何实际执行此操作,如何在联接中表达关系?
我认为它可能是santos.owner = Owner.find(1)
,但不是。我的书实际上并没有解决这个问题,他们似乎只是假设这种关系神奇地存在。我真的很沮丧,因为我整个晚上都在这上面并且无处可去,无法在任何地方找到这些信息。
答案 0 :(得分:0)
您缺少的是在Pet
模型中通过rails迁移创建外键。如果遵循约定,则应将数据库中的列称为owner_id
运行迁移后,您在问题中编写的代码应该可以正常运行。
关于在何处查找信息:导轨指南非常有用。
以下是涵盖协会的内容:http://guides.rubyonrails.org/association_basics.html
针对您特定的has_many案例:http://guides.rubyonrails.org/association_basics.html#the-has-many-association
答案 1 :(得分:0)
我认为您没有忘记将owner_id
放入pets
表。
然后,你可以这样做:
owner = Owner.find(1) // find some owner
pet = owner.pets.create(name: 'Santos', species: 'Dog')
并且该所有者与您的新宠物有关。您可以使用build
代替create
方法,但在这种情况下,您必须手动保存。此示例将宠物自动保存在数据库中。
<强>更新强>
现在,如果您想查看所有者的所有宠物,您将使用:
owner = Owner.find(1) // find some owner
pets = owner.pets
如果你有一些宠物,你可以找到所有者:
pet = Pet.find(1) // find some pet
owner = pet.owner