Railsにて列名から機械的に決定できないテーブルへの参照を定義する

at 2017-03-24 11:36 (UTC)

students テーブルがあったとして、兄弟の情報を持ちたい。

class CreateSiblings < ActiveRecord::Migration[5.0]
  def change
    create_table :siblings do |t|
      t.references :senior, foreign_key: true
      t.references :junior, foreign_key: true

      t.timestamps
    end
  end
end

こんなテーブルを作りたいが seniors テーブルも juniors テーブルも存在しないので参照が張れない。
そんな場合はこうすればよい。

class CreateSiblings < ActiveRecord::Migration[5.0]
  def change
    create_table :siblings do |t|
      t.references :senior, foreign_key: { to_table: :students }
      t.references :junior, foreign_key: { to_table: :students }

      t.timestamps
    end
  end
end