LoginSignup
6
3

More than 5 years have passed since last update.

add_foreign_key を利用したときのキー名は実行するたびに変わる

Posted at

タイトルの通り、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オプションは指定しないとダメそうである。どうしてこんな感じになってるの…教えて偉い人!

6
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3