もとになるジェネレータの格納場所
カスタマイズを加えるもとになるジェネレータのソースファイルは、Rubyのインストールディレクトリの配下である「lib\ruby\gems\1.8\gems\rails-1.2.5\lib\rails_generator\generators\components\scaffold」といったパスに存在しています。このパスに存在しているファイルに対してカスタマイズを加えます。
Rails 2.0用のscaffoldも存在しますが、今回はRails 1.2.5のscaffoldをRails 2.0で動作するようにカスタマイズします。
これから作成するジェネレータの格納場所
カスタマイズを加えたジェネレータの格納場所
さて、これから作成するジェネレータの格納場所ですが、Railsは次に示すディレクトリからユーザー定義のジェネレータを探しますので、本稿では「lib\generators」配下にジェネレータを配置します。「generators」フォルダがない場合は、作成します。
- RAILS_ROOT\lib\generators
- RAILS_ROOT\vendor\generators
- RAILS_ROOT\vendor\plugins\任意のサブディレクトリ\generators
RAILS_ROOTはRailsで生成したアプリケーションのルートディレクトリを表しています。
格納場所の作成
前述の「もとになるジェネレータの格納場所」にあるディレクトリやファイルをコピーして、次のようにディレクトリ名・ファイル名を変更することで、「これから作成するジェネレータの格納場所」を作ります。
- 「RAILS_ROOT\lib\generators」に「condition_scaffold」というディレクトリを作成します。その配下に「condition_scaffold_generator.rb」というファイルを作成します。
- また、「condition_scaffold」ディレクトリの配下に「templates」ディレクトリを作成します。「templates」ディレクトリの配下にはジェネレートするファイルのテンプレートを保存します。
フォーカスアウト時の名称引当マスタ
フォーカスアウト時の名称引当マスタを用意します。
class CreateFocusOut < ActiveRecord::Migration
def self.up
# フォーカスアウト時の名称引当マスタ
create_table :focus_outs do |t|
# チェック対象の列名
t.column :check_column_name, :string
# チェックOKの場合に、名称を反映するための列名
t.column :reflection_name , :string
# チェック対象のテーブル名
t.column :check_table_name , :string
end
end
def self.down
drop_table :focus_outs
end
end
チェック対象の任意の列名を「check_column_name」に設定します。チェック対象のマスタテーブル名を「check_table_name」に設定します。「check_column_name」を条件に「check_table_name」を検索し、レコードが存在した場合、チェックOKとします。チェックOKの場合に、名称を反映し表示するための列名を「reflection_name」に設定します。
フォーカスアウト時の名称引当マスタをメンテナンスするアプリケーションは、記事添付のソースコードに格納されています。「http://localhost:3000/focus_outs/list」にアクセスして、表1のようなデータを登録してください。
| check_column_name | reflection_name | check_table_name |
| buhin_shikibetsu_id | buhin_shikibetsu | MstBuhinShikibetsu |
| tehai_kubun_id | tehai_kubun | MstTehaiKubun |
| zaiko_kubun_id | zaiko_kubun | MstZaikoKubun |
| shikyu_kubun_id | shikyu_kubun | MstShikyuKubun |
