walktan’s blog

SIer勤務4年目。Web業界への転職計画遂行中。プログラミングなどの学習記録(備忘録)などを記していく。

Rails4 主キーのカラム名を id 以外に変更する方法

Railsでは、テーブルを生成すると自動的にidという主キーが生成されるが、
これを<テーブル名>_idという名称に変更する際のメモ

<背景>
Active Recordでjoinsした際に、複数テーブルにidというカラム名
存在すると、列別名をつける必要がでてくる。そこで、主キーをidではなく、
<テーブル名>_idという名称に変更して、列別名をつける手間を省きたい

<結論>
こんなmigrationファイルを作成すればよい
(idとしての特性はそのままxxx_idに引き継がれる)

class RenameColumnIdToXxxId < ActiveRecord::Migration
  def change
    rename_column :xxx, :id, :xxx_id
  end
end


そもそもテーブルを生成する際に主キー名を<テーブル名>_idにする場合は、
rails g model XXXして生成されたmigrationファイルを以下のように修正する
(id: falseオプションで主キーの生成をさせず、代わりの主キーを設定する)

class CreateXxxs < ActiveRecord::Migration
  def change
    create_table :xxxs, id: false do |t|
      t.column :xxx_id, 'INTEGER PRIMARY KEY AUTO_INCREMENT'
      t.string :title

      t.timestamps
    end
  end
end



以下を参考に四苦八苦したが、一度つくってしまったテーブルについてはrename_columnが簡単だった blog.takanabe.tokyo
以上