2017-10-27 15 views
0
create_table "addresses", force: :cascade do |t| 
    t.integer "user_id" 
    t.string "code_postal" 
    t.string "street_name" 
    t.string "street_number" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.index ["code_postal"], name: "index_addresses_on_code_postal" 
    t.index ["user_id"], name: "index_addresses_on_user_id" 
    end 

    create_table "users", force: :cascade do |t| 
    t.string "name_first" 
    t.string "name_last" 
    t.date "date_birth" 
    t.string "address_email" 
    t.integer "address_primary_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

ユーザは多くのアドレスを持つことができますが、ユーザは1つのプライマリアドレスしか持てません。rails activerecordのユーザプライマリアドレスに外部キー制約を追加

address_primary_idに外部キー制約を追加するにはどうすればよいですか?私はあなたの団体を想定してい

+0

移行で外部キーを追加できますが、正しく理解しているかどうかはわかりません。今すぐaddress_primary_idはどのように使用しますか?あなたのモデルに関係が設定されていますか? – Ninigi

答えて

1

は、次のようになります。

class User < ApplicationRecord 
    belongs_to :address_primary, class_name: Address 
    has_many :addresses 
end 

class Address < ApplicationRecord 
    belongs_to :user 
    has_one :user_as_primary, class_name: User, foreign_key: :address_primary_id 
end 

あなたはこのラインでの移行で必要な外部キーを作成することができます:ここで

add_foreign_key :users, :addresses, column: :address_primary_id 

docs on foreign keys in migrationsあります。

+1

'...、column :: address_primary_id'を使ってマイグレーションにカラムを追加して、実際のテーブルとの関係を持たせるか、テーブル名を渡す必要があると確信しています。 – Ninigi

+0

@ニニギあなたは正しいです私は列を指定する必要があります。編集します。 – hoffm

関連する問題