undefined method ?
Rails でマイグレーションファイルを利用してデータベースにテーブルを作成するときに
マイグレーションで外部キーを設定する2通りの方法 - Katawara.*
を参考に
migration_helper.rb
module MigrationHelper def foreign_key(from_table, from_column, to_table) constraint_name = "fk_#{from_table}_#{to_table}" execute "alter table #{from_table} add constraint #{constraint_name} foreign key (#{from_column}) references #{to_table}(id)" end end
xxxxxxxxxxxxxx_create_employees.rb
require 'migration_helper' class CreateEmployees < ActiveRecord::Migration extend MigrationHelper def change create_table :employees do |t| t.string :employee_name t.string :phonetic t.integer :mgr_id t.date :birthday t.integer :sex end foreign_key(:employees, :mgr_id, :employees) end end
ってやって rake db:migrate を実行すると foreign_key のところで undefined method って言われて migrate が abort する…。
参考 : バージョン等
追記 : extend を include に変えたら undefined method は出なくなったが、今度は SQLException が出た。自己参照してるのが拙いのか ?
追記 2 : そもそも SQLite3 に外部キー制約がない(全くないわけではないが ODBC 等による制御が必要)ので、この方法は無理だった。あきらめます。
追記 3 : SQLite では既存のテーブルの既存のカラムに対して後から制約だけを追加することは不可能と判明 orz