[[Railsメモ]] > RailsでScaffoldの実行内容をカスタマイズする
* RailsでScaffoldの実行内容をカスタマイズする [#p85b2f07]
#setlinebreak(on);

RailsでScaffoldの実行内容をカスタマイズするには、いくつかの方法がある。
例えば、生成されるファイルの内容を変えるには、rake rails:templates:copy でテンプレートをコピーし、コピーされたファイル編集する。
また、SCSS を SASS に変更するには、config/appilicatin.rb を編集する事で実現できる。

ここでは、scaffold はそのまま実行し、少しだけ追加の処理を行う為の簡単な方法を記載する。


以下、モデルの列定義を config/locales/models 配下に yml に出力する例。

** ジェネレータの作成 [#p6e6838d]

まず、generate コマンドで、自作のジェネレータを作成する。
#myterm2(){{
rails generate generator myscaffold
}}


** 自作ジェネレータの編集 [#v281d7ba]
lib/generators/modelyml/myscaffold_generator.rb
#mycode2(){{
class MyscaffoldGenerator < Rails::Generators::NamedBase
  source_root File.expand_path('../templates', __FILE__)

  def generate

    # 1つ目の引数は @name 、2つ目以降の引数は @args で取得できる

    # scaffold 引数を作成
    scaffold_args = @name
    @args.each do | arg |
      scaffold_args += " " 
      scaffold_args += arg 
    end 

    # scaffold 引数を追加
    scaffold_args += " --timestamps --javascript-engine=js --stylesheet-engine=css --no-stylesheets"

    # まず通常のscaffoldを実行
    #generate "scaffold", scaffold_args
    result = `rails g scaffold #{scaffold_args}`
    puts result

    # メッセージを出力
    puts "\33[31m--- Original Scaffold ---\33[0m"

    # ymlを作成
    model = Module.const_get(@name.classify)
    fields = model.fields
    yml = ""
    #yml += "ja:\n"
    #yml += "  " + "activerecord:\n"   # orm が activerecord の場合
    yml += "  mongoid:\n"       # orm が mongoid の場合
    yml += "    " + "models:\n"
    yml += "      " + model.name.downcase + ": \"" + model.name.downcase + "\"\n"
    yml += "    " + "attributes:\n"
    yml += "      " + model.name.downcase + ":\n"
    fields.each_key do | key |
      yml += "        " + key + ": " + "\"" + key + "\"\n"
    end 
    create_file("config/locales/models/" + model.name.downcase + "/en.yml", "en:\n" + yml)
    create_file("config/locales/models/" + model.name.downcase + "/ja.yml", "ja:\n" + yml)

  end 
end
}}

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS