migration時に自動で外部キーをセットする

Foreign Key Migrations

Railsのmigrationって、DBそのものに外部キー制約をつける場合は自前でSQLを書かないといけないので面倒なんですよね。

対策の1つとして、以下のようなヘルパを作成する方法があります。

module MigrationHelpers
  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

これを実装すれば毎回execute文で外部キーを定義するよりもだいぶ楽にはなります。が、ここまできたのなら全自動でやってほしいところ。そんなときに先に紹介したプラグインの登場です。まずはこいつをインストールします。

$ ruby script/plugin install svn://rubyforge.org/var/svn/redhillonrails/branches/stable-2.0/vendor/plugins/redhillonrails_core
$ ruby script/plugin install svn://rubyforge.org/var/svn/redhillonrails/branches/stable-2.0/vendor/plugins/foreign_key_migrations  

とまあこれをインストールすればOKぽいです。試しにこれをインストールしてdb:migrateを実行したらちゃんと張られてました。眠いので紹介だけ。