タイトルの通り、Rails 4.2 から使えるようになった外部キー設定用のメソッドadd_foreign_key
だが、これにname
オプションをしてしなかった場合デフォルトでfk_rails_xxxxx
のような名前になる。
が、これ、マイグレーションを実行するたびに違う名前になる。
コードを見てみたらSecureRandom.hex
で採番されていた。参照元と参照先のテーブル名やカラム名をもとにしてるのかと思ったけど完全にランダムのようである。
def foreign_key_name(table_name, options) # :nodoc:
options.fetch(:name) do
"fk_rails_#{SecureRandom.hex(5)}"
end
end
これだとdown
側のマイグレーション書けないし、rake db:migrate:reset
しただけでもschema.rb
に差分が出てしまうのでname
オプションは指定しないとダメそうである。どうしてこんな感じになってるの…教えて偉い人!