結論
生SQLを書くしかなさそう。
具体例
users
テーブルとitems
テーブルを、column_1
とcolumn_2
のキーで結びつける場合です。複合主キーとなるのはitems
テーブルの方です。
class CreateUsers < ActiveRecord::Migration[5.1] def change create_table :users do |t| t.string :column_1 t.string :column_2 t.string :column_3 t.string :column_4 t.timestamps end # 複合外部キーを設定するのはこうするしかなさそう…… sql = 'ALTER TABLE users ADD FOREIGN KEY (column_1, column_2) REFERENCES items (column_1, column_2);' ActiveRecord::Base.connection.execute(sql) end end
補足
3時間ぐらい調べまくったけれども書き方が見つからなかった。もちろん調べ方が悪い、足りない可能性もあるけど、以下のように Rails 自体の思想であるとのこと*1なので、やはり無いのかなと思った。
あと、これぐらいなら手動でさっさと書くほうが早かった。
当然
グレーノウハウっぽい気がするので、どなたかご存知でしたら教えてください。やっぱり中間テーブル使うのがセオリーなのかなと。
バージョン
$ bundle exec ruby -v ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux] $ bundle exec rails -v Rails 5.1.1
補足(追記)
*1:8年前の記事だけれども