Railsメモ > RailsでScaffoldの実行内容をカスタマイズする RailsでScaffoldの実行内容をカスタマイズする †RailsでScaffoldの実行内容をカスタマイズするには、いくつかの方法がある。 ここでは、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 |