仅存储两个相关表的id

时间:2017-02-11 12:39:45

标签: ruby-on-rails

喜欢所有权。

假设我已经有两个模型:

person name:string
dog name:string

现在我需要拥有第三张表 - 所有权。

在普通的关系数据库中,我只需要存储这些表中的两个id,但rails会自动生成它们。那么我该如何参考呢?

rails generate model Ownership XXXXXXXX

2 个答案:

答案 0 :(得分:2)

您可以设置关系模型,如下所示:

rails generate model ownerships person:references dog:references
rails db:migrate

应用程序/模型/ ownership.rb:

class Ownership < ApplicationRecord
  belongs_to :person
  belongs_to :dog
end

应用程序/模型/ person.rb:

class Person < ApplicationRecord
  has_many :ownerships
  has_many :dogs, through: :ownerships
end

现在你可以做到:

john  = Person.create(name: 'John')
doggy = Dog.create(name: 'Doggy')

john.dogs << doggy

你刚刚给约翰的所有权添加了一条狗。你可以这样找到它们:

puts john.dogs.first.name
# => "Doggy"

如果查看生成的schema.rb:

  create_table "ownerships", force: :cascade do |t|
    t.integer  "person_id"  # Here are your two ids
    t.integer  "dog_id"     #
    # ...

<小时/> 我建议你通过Rails Tutorial by Michael Hartl。在最后一节中,他通过非常详尽的解释实现了一种关系模型。

答案 1 :(得分:0)

你想要的是一个has_:through relationship或has_and_belongs_to_many关系。查看文档以获取更多信息(您可以找到有关如何设置数据库和关系的详细说明。)这是rails中的标准问题: http://guides.rubyonrails.org/association_basics.html