rails generate
rails generate は rails g と短縮可能。
dry run
rails g は -p ( --pretend ) を付けることで dry run 可能。
実際にファイルは作らないので、複数形だっけ?なんのファイル作るんだっけ?という時の確認に便利。
$ rails g controller Dashboard -p
create app/controllers/dashboard_controller.rb
invoke erb
create app/views/dashboard
invoke test_unit
create test/controllers/dashboard_controller_test.rb
invoke helper
create app/helpers/dashboard_helper.rb
invoke test_unit
create test/helpers/dashboard_helper_test.rb
invoke assets
invoke coffee
create app/assets/javascripts/dashboard.js.coffee
invoke scss
create app/assets/stylesheets/dashboard.css.scss
コントローラの作成
コントローラ名は基本は複数形。Dashboard のように単数形でも可。
コントローラ名を ProductCategories と CamelCase で指定すると product_categories_controller.rb になる。
$ rails g controller ProductCategories
create app/controllers/product_categories_controller.rb
invoke erb
create app/views/product_categories
invoke test_unit
create test/controllers/product_categories_controller_test.rb
invoke helper
create app/helpers/product_categories_helper.rb
invoke test_unit
create test/helpers/product_categories_helper_test.rb
invoke assets
invoke coffee
create app/assets/javascripts/product_categories.js.coffee
invoke scss
create app/assets/stylesheets/product_categories.css.scss
ビューも指定可能。
$ rails g controller Dashboard index edit show new
create app/controllers/dashboard_controller.rb
route get 'dashboard/new'
route get 'dashboard/show'
route get 'dashboard/edit'
route get 'dashboard/index'
invoke erb
create app/views/dashboard
create app/views/dashboard/index.html.erb
create app/views/dashboard/edit.html.erb
create app/views/dashboard/show.html.erb
create app/views/dashboard/new.html.erb
invoke test_unit
create test/controllers/dashboard_controller_test.rb
invoke helper
create app/helpers/dashboard_helper.rb
invoke test_unit
create test/helpers/dashboard_helper_test.rb
invoke assets
invoke coffee
create app/assets/javascripts/dashboard.js.coffee
invoke scss
create app/assets/stylesheets/dashboard.css.scss
モデルの作成
モデル名は単数形。
id, created_at, updated_at カラムは自動で作られる。
$ rails g model Product name:string quantity:integer product_category:references
invoke active_record
create db/migrate/20141203093915_create_products.rb
create app/models/product.rb
invoke test_unit
create test/models/product_test.rb
create test/fixtures/products.yml
カラムに指定できる型は下記。
- binary
- boolean
- date
- datetime
- decimal
- float
- integer
- primary_key
- references
- string
- text
- time
- timestamp
references は関連を表す。
ProductCategory と Product があった場合に product_category:references すると、product.product_category_id カラムを作成し、INDEX も張ってくれる。
Scaffold の作成
コントローラもモデルもまとめて生成。/product_categories/ にアクセスすれば CRUD 機能も用意されている。
モデル名を指定する。
$ rails g scaffold ProductCategory name:string
invoke active_record
create db/migrate/20141203093952_create_product_categories.rb
create app/models/product_category.rb
invoke test_unit
create test/models/product_category_test.rb
create test/fixtures/product_categories.yml
invoke resource_route
route resources :product_categories
invoke scaffold_controller
create app/controllers/product_categories_controller.rb
invoke erb
create app/views/product_categories
create app/views/product_categories/index.html.erb
create app/views/product_categories/edit.html.erb
create app/views/product_categories/show.html.erb
create app/views/product_categories/new.html.erb
create app/views/product_categories/_form.html.erb
invoke test_unit
create test/controllers/product_categories_controller_test.rb
invoke helper
create app/helpers/product_categories_helper.rb
invoke test_unit
create test/helpers/product_categories_helper_test.rb
invoke jbuilder
create app/views/product_categories/index.json.jbuilder
create app/views/product_categories/show.json.jbuilder
invoke assets
invoke coffee
create app/assets/javascripts/product_categories.js.coffee
invoke scss
create app/assets/stylesheets/product_categories.css.scss
invoke scss
create app/assets/stylesheets/scaffolds.css.scss
rails g の取り消し
間違えて rails g したファイルを rails destroy で一括削除できる。rails d と短縮可能。
$ rails g controller ProductCategories $ rails d controller ProductCategories
$ rails g model Product name:string quantity:integer $ rails d model Product
$ rails g scaffold ProductCategory name:string $ rails d scaffold ProductCategory