Posted at

rails g scaffold のカスタマイズ

More than 5 years have passed since last update.

参考: http://guides.rubyonrails.org/generators.html


テンプレートのカスタマイズ

rake -T では出てこないけど、下記のタスクを使う

rake rails:templates:copy

すると下記のファイルが生成される。

lib

└── templates
├── erb
│   ├── controller
│   │   └── view.html.erb # rails g controlle で使われる
│   ├── mailer
│   │   └── view.text.erb # rails g mailer で使われる
│   └── scaffold
│   ├── _form.html.erb
│   ├── edit.html.erb
│   ├── index.html.erb
│   ├── new.html.erb
│   └── show.html.erb
└── rails
├── assets
│   ├── javascript.js
│   └── stylesheet.css
├── controller
│   └── controller.rb # rails g controller で使われる
├── helper
│   └── helper.rb
└── scaffold_controller
└── controller.rb

上でコメントしたもの以外は rails g scaffold で使用される。

ここでたとえば lib/templates/scaffold/show.html.erb を変更すれば次に rails g scaffold した際に反映される。


Haml を生成

scaffold で Haml を生成する場合 generator をつくる必要がある (rake rails:templates:copy は必要ない)。

rails g generator haml/scaffold

lib

└── generators
   └── haml
   └── scaffold
   ├── USAGE
   ├── scaffold_generator.rb
   └── templates

scaffold_generator.rb を下記のように修正する。

require "rails/generators/erb/scaffold/scaffold_generator"

# erb 用の generator を継承する
class Haml::ScaffoldGenerator < Erb::Generators::ScaffoldGenerator
source_root File.expand_path('../templates', __FILE__)

protected
def handler
:haml
end
end

lib/generators/haml/scaffold/templates 下に _form.haml, edit.haml, index.haml, new.haml, show.haml を用意する。

これらは erb として評価される。rake rails:templates:copy で生成される lib/templates/erb/scaffold/*.html.erb を参考に。

config/application.rb で、使用する generator を指定する。

# config/application.rb

module Foo
class Application < Rails::Application
config.generators do |g|
g.template_engine :haml
# 下記も指定しておくと無駄な helper / js / css が生成されない
# g.helper false
# g.stylesheets false
# g.javascripts false
end
# ...
end
end