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