コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

RailsのActiveRecordでは add_column するときに after を指定すると追加するカラム位置がコントロールできる

主にMySQL向け

環境

rails (5.0.2)

やり方

カラム追加の記述の場合にafterを指定する。

name というカラムのあとに profile_text というカラムを足したい場合

class AddColumnHogeHoge < ActiveRecord::Migration[5.0]
  def change
    add_column :users, :profile_text, :string, after: :name, default: "", null: false
  end
end

原理

以下メソッドに記述があるとおり、AFTER文を継ぎ足している。そのため、AFTER文の概念がないpostgresqlにはできない。

def add_column_position!(sql, options)
if options[:first]
  sql << " FIRST"
elsif options[:after]
  sql << " AFTER #{quote_column_name(options[:after])}"
end

from: rails/schema_creation.rb at 36a6d935d2994e776054797be3c00cd50c19b1e9 · rails/rails

参考リンク