|
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
|