2017-09-07 8 views
1

対FOREIGN_KEYこれは、私は違いがW/Bコードのこれらline.Bothラインはテーブル間の基準を達成するために正常に動作しているされているもの混乱しています私のコードRailsのアクティブレコード:参照

class CreatePosts < ActiveRecord::Migration[5.1] 
    def change 
    create_table :posts, id: :uuid do |t| 
     t.string :name 

     t.references :user, type: :uuid 
     t.references :user, type: :uuid, foreign_key: true  

     t.timestamps 
    end 
    end 
end 

です。

t.references :user, type: :uuid 
t.references :user, type: :uuid, foreign_key: true #what this line is doing 

ない FOREIGN_KEY を使用するとき、誰が私を説明することができます。

上記のコードでは、これらの

t.references :makers, foreign_key: { to_table: :office } 

を検索FOREIGN_KEYが真でない間、私は似たものを見つけます。いくつかのテーブルを参照しています。なぜそうなの?

答えて

0

references hereの文書を確認できます。add_referenceと同じオプションが使用されています。

ので、異なるです:

t.references :user, type: :uuid - 制約を追加せずに列を追加します。

t.references :user, type: :uuid, foreign_key: true - 列と外部キー制約を追加します。 foreign_keyを指定しないと、falseになります。

foreign_key: { to_table: :table_name } - 規約名の代わりにカスタム名を含む列を追加することもできます。例えば

は、文書内:そう

add_reference(:products, :supplier, foreign_key: {to_table: :firms})

、それは表productsに列名supplier_idを追加し、firmsテーブルを参照する外部キーを追加します。

コンベンション名に従う場合は、supplier_idの代わりにfirm_idという名前の列を追加すると便利です。

0

foreign_key: trueは、外部キー制約を作成します。外部キー制約がない場合は、外部キーのみが作成されます。

外部キーと外部キー制約の違いを理解するには、thisリンクをご覧ください。

foreign_key: { to_table: :office }を指定すると、外部キー参照がofficeテーブルになります。

関連する問題