使用t.integer和t.reference在rails迁移中定义外键有什么区别

pla*_*mbo 5 ruby-on-rails-3

鉴于两个类,Apple和Orange:

def class Apple < ActiveRecord::Base
  has_and_belongs_to_many :oranges
end

def class Orange < ActiveRecord::Base
  has_and_belongs_to_many :apples
end
Run Code Online (Sandbox Code Playgroud)

使用t.integer在连接表中定义外键有什么区别:

create_table :apples_oranges, :id => false do |t|
  t.integer :apple_id
  t.integer :orange_id
end
Run Code Online (Sandbox Code Playgroud)

并使用t.references在连接表中定义外键:

create_table :apples_oranges, :id => false do |t|
  t.references :apple
  t.references :orange
end
Run Code Online (Sandbox Code Playgroud)

我看过两者,它们似乎是可以互换的.只是想确保没有一些我遗漏的微妙/魔法.

哦,我在Rails 3.2上使用MySQL

pdu*_*uey 8

http://guides.rubyonrails.org/migrations.html#special-helpers

本身没有魔力.如果您愿意,可以使迁移更具可读性,更易使用,如果您使用多态,则还要添加类型列.所以,或者,但参考更好,只是因为它.

  • 您还可以使用`t.belongs_to`作为`t.references`的同义词,这使得关联对于阅读迁移的人来说更加明确. (4认同)