2012-04-02 81 views
5

鑑於兩類,蘋果和橘子之間的區別:什麼是使用t.integer和t.reference在Rails遷移定義外鍵

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

def class Orange < ActiveRecord::Base 
    has_and_belongs_to_many :apples 
end 

什麼用t.integer定義外的區別在連接表項:

create_table :apples_oranges, :id => false do |t| 
    t.integer :apple_id 
    t.integer :orange_id 
end 

,並使用t.references來定義連接表的外鍵:

create_table :apples_oranges, :id => false do |t| 
    t.references :apple 
    t.references :orange 
end 

我已經看到兩者,他們似乎是可以互換的。只是想確保我沒有一點微妙/魔力。

哦,我on Rails的3.2W/MySQL的

回答

8

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

沒有魔術本身。如果您願意,可以使遷移更具可讀性,更具有爭議性,如果您使用多態性,也會添加類型列。所以,無論如何,但引用是更好的,只是因爲它。

+0

非常好,謝謝! – plainjimbo 2012-04-02 22:03:26

+4

您還可以使用't.belongs_to'作爲't.references'的同義詞,這使得關聯對於閱讀遷移的任何人都更加明確。 – MrTheWalrus 2012-04-03 00:17:07