Rails3レシピブックを読みながらRailsを学ぶ モデル、コントローラ、ビュー、Railsの規約など
参考
- Rail3レシピブック 190の技
環境
- WindowsXP
- Ruby1.8.7
- Rails3.2.1
MVCを自動生成する
アプリケーションのscaffold(足場)の作成
scaffoldジェネレータを実行する事でCRUD操作が可能な簡単なアプリケーションの足場が生成できる。コマンドはrails generate ジェネレータ モデル名 カラム名:型 カラム名:型 (以下繰り返せる)...
$ bundle exec rails generate scaffold Blog name:string user_id:integer invoke active_record create db/migrate/20120229022816_create_blogs.rb create app/models/blog.rb invoke test_unit create test/unit/blog_test.rb create test/fixtures/blogs.yml route resources :blogs invoke scaffold_controller create app/controllers/blogs_controller.rb invoke erb create app/views/blogs create app/views/blogs/index.html.erb create app/views/blogs/edit.html.erb create app/views/blogs/show.html.erb create app/views/blogs/new.html.erb create app/views/blogs/_form.html.erb invoke test_unit create test/functional/blogs_controller_test.rb invoke helper create app/helpers/blogs_helper.rb invoke test_unit create test/unit/helpers/blogs_helper_test.rb invoke assets invoke coffee create app/assets/javascripts/blogs.js.coffee invoke scss create app/assets/stylesheets/blogs.css.scss invoke scss create app/assets/stylesheets/scaffolds.css.scss
いろいろ生成された! 確かに前回のまとめたファイルとディレクトリの役割通りにファイルが生成されてるっぽい。
テーブルの作成
テーブルをDBに定義。rake db:migrateコマンドを実行する。足場を作った際にdb/migrate/20120229022816_create_blogs.rbというマイグレーションファイルができたので、これを使っている?
$ bundle exec rake db:migrate == CreateBlogs: migrating ==================================================== -- create_table(:blogs) -> 0.0000s == CreateBlogs: migrated (0.0000s) ===========================================
作られたようだ。
マイグレーションとは
また起動
で、わくわくしながら起動。アドレスはhttp://localhost:3000/blogs。Listing blogsというページとCRUDできるフォームが用意されたページが!
Blogモデルを作成して、blogsになったのは規約ってやつだろうか……といったところで次のレシピが規約だった。
Railsの規約
- 設定ファイルはあまり作らない
- ファイル名、クラス名、ディレクトリの場所に規則
規則を知る事でどこでなにやってるのかわかりそう。
コントローラ
- app/controllers/に格納
- クラス名は単語区切りキャメルケースで「(先頭大文字)コントローラController」 => BlogsController
- ファイル名はクラス名をスネークケースに変換 => blogs_controller.rb
- 名称は対応するモデルの複数系 => BlogモデルのコントローラなのでBlogs
- scaffoldで生成されたモデルとコントローラもこの規則に従っている
なるほどね。だからBlogモデルでコントローラはBlogsだったのか。
モデル
- app/models/に格納
- クラス名は単語区切りキャメルケースで名詞の単数形 => Blog
- ファイル名はクラス名をスネークケースに変換 => blog.rb
- モデルとDBテーブルは1:1で対応 => モデルBlog : blogsテーブル
- 変換ルールはActiveSupportで定義されている
ビュー
- app/views/コントローラ名/にテンプレート
- 上で作ってたblogの場合app/views/blogsの下
- ビューファイル名はindex.html.erb, show.html.erb 等
- show.html.erb の場合はshowアクションを実行する場合show.html.erbをerbでレンダリングしてhtmlフォーマットで出力とかそういう感じかな
……ここまではなんとか。どこで何してるかとかは少しずつわかってきた。