SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

Ruby on RailsのScaffoldをカスタマイズして使いやすくする

Ruby on Railsをプロジェクトに適した形にカスタマイズする試み

もとになるジェネレータの格納場所

 カスタマイズを加えるもとになるジェネレータのソースファイルは、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で生成したアプリケーションのルートディレクトリを表しています。

格納場所の作成

 前述の「もとになるジェネレータの格納場所」にあるディレクトリやファイルをコピーして、次のようにディレクトリ名・ファイル名を変更することで、「これから作成するジェネレータの格納場所」を作ります。

  1. 「RAILS_ROOT\lib\generators」に「condition_scaffold」というディレクトリを作成します。その配下に「condition_scaffold_generator.rb」というファイルを作成します。
  2. また、「condition_scaffold」ディレクトリの配下に「templates」ディレクトリを作成します。「templates」ディレクトリの配下にはジェネレートするファイルのテンプレートを保存します。

フォーカスアウト時の名称引当マスタ

 フォーカスアウト時の名称引当マスタを用意します。

0xx_create_focus_out.rb
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のようなデータを登録してください。

表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

次のページ
ジェネレータのカスタマイズコード

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

ryujinseiichi(リュウジンセイイチ)

http://ryujinseiichi.sblo.jp/ RubyやAIRなどの新規技術に興味があり、研究を行っています。 最近、seasar2やBPMの研究も始めました。  

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2912 2008/09/19 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー