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
以上