52780


以下のように自分自身に対して多対多の関係を持つモデルを使っています。

### models/user.rb

[code]

    has_many :friendships
    has_many :friends, through: :friendships
    
[/code]

### models/friendship.rb

[code]

    belongs_to :user
    belongs_to :friend, class_name: "User"
    
[/code]

この`Friendship`を作成する時に`create_table`で`foreign_key:
true`の制約をつけると当然ですがエラーになってしまいます。

[code]

    create_table :friendships do |t|
      t.references :user, foreign_key: true
      t.references :friend
    end
    
[/code]

ですので、以上のように制限無しで作成してしまっているのですが

この`friendships`の`friend_id`カラムに外部キー制約を追加するにはどのようにすればよいのでしょうか？


CC BY-SA 4.0
2019-02-12T21:44:45.900
52738
2019-02-14T12:42:13.440
3271
question
ruby-on-rails
自分自身に対して多対多を持つモデルのDBへ外部キー制約を追加する方法


質問を書いた後に`add_foreign_key`のドキュメントを見たら書いてました…。

[code]

    create_table :friendships do |t|
      t.references :user, foreign_key: true
      t.references :friend
    end
    add_foreign_key :friendships, :users, column: :friends_id
    
[/code]

で`friend_id`カラムにも外部キー制約を行えました。


CC BY-SA 4.0
2019-02-12T21:44:45.900
52739
2019-02-12T21:44:45.900
3271
52738
answer

[code]

    t.references :friend, foreign_key: { to_table: :users }
    
[/code]

とすると、 `create_table` の中で実行できるような気がします。


CC BY-SA 4.0
2019-02-14T12:42:13.440
52780
2019-02-14T12:42:13.440
754
52738
answer