Redmineプラグイン開発でモデルへカラムを追加する方法
Redmineプラグインはrailsで動作しているが、MVCを生成するrailsジェネレータはplugin用のものを使用するようだ。このため、新規作成・削除といった基本的な操作はできるものの、変則的な操作は対応していなさそう。
代表例として一度作成したテーブルへカラムを追加するケースが挙げられる。 備忘録として、代替方法を記録しておく。
マイグレーションファイルの作成
テーブルへカラムを追加するためのマイグレーションファイルを作成する。今回は例として人(Person)テーブルへ年齢(age)というカラムを追加する。
$ vi db/migrate/001_add_age_to_person.rb
ファイル名の先頭連番は既に存在するマイグレーションファイルに続く番号とすること。おそらくこの連番に沿ってマイグレーションを実行していくため、連番が誤っているとテーブルを壊しかねない。
マイグレーションファイルには下記の通り記載する。
class Addカラム名Toテーブル名 < ActiveRecord::Migration def up add_column :テーブル名, :カラム名, :型名 end end
今回の例では下記の通りとなる。
class AddAgeToPersons < ActiveRecord::Migration def up add_column :persons, :age, :integer end end
マイグレーションの実行と確認
マイグレーションを実行する
$ bundle exec rake redmine:plugins:migrate (マイグレーションの経過状況が出力される) $ mysql -uroot -p mysql> use redmine_development; mysql> show columns from persons; (カラム一覧が表示され、ageが追加されていることを確認できる)