Railsメモ > RailsでScaffoldの実行内容をカスタマイズする

RailsでScaffoldの実行内容をカスタマイズする

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

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

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

ジェネレータの作成

まず、generate コマンドで、自作のジェネレータを作成する。

rails generate generator myscaffold

自作ジェネレータの編集

lib/generators/modelyml/myscaffold_generator.rb

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
Last-modified: 2016-05-22 (日) 04:46:18 (2894d)