Rails外键

时间:2017-06-15 04:17:50

标签: ruby-on-rails activerecord

我不确定我是否完全关注这个问题。我想在storesdocuments之间建立关系。

在文档表中,我希望引用创建它的storeaccount。为此,我将运行此迁移

rails g AddStoreToDocuments store:references

然后在模型中指定foreign_keyaccount_id的{​​{1}}个?

像这样?

store_id

正确的方法是什么?

4 个答案:

答案 0 :(得分:2)

我建议你阅读rails guide on migration.

您可以使用

生成参考
rails g migration AddStoreRefToDocuments store:references
rake db:migrate

这将生成迁移。您的模型应该提到关联以使其正常工作

Class Store < ActiveRecord::Base
  has_many :documents
end

Class Document < ActiveRecord::Base
  belongs_to :store
end

答案 1 :(得分:1)

  

在文档表中,我希望引用storeaccount   创造了它。

您的关系应该是belongs_to而不是has_many

belongs_to :store
belongs_to :account

请注意,由于您遵循ActiveRecord约定,因此您无需指定任何外键(它将使用store_idaccount_id)。

has_manyStore模型中应使用Account关系:

has_many :documents

您还需要更新迁移(或创建新迁移)以添加account:references

答案 2 :(得分:1)

您的文件表应该引用这两个表格。

rails g AddStoreToDocuments store:references account:references

关系应该是存储has_many文件和帐户has_many文件。 所以在文档模型中:

belongs_to :store
belongs_to :account
商店模型中的

has_many :documents
账户模型中的

has_many :documents

答案 3 :(得分:0)

首先,您的迁移会抛出错误,应该是

rails g migration AddStoreToDocuments store:references

生成的迁移看起来像

def change
  add_reference :documents, :store, index: true, foreign_key: true
end

然后呢,

rake db:migrate

会在store_id表格中自动创建列documents,因此在documents.rb

belongs_to :store
belongs_to :account #this you might already be having I suppose