[Ruby][Rails][Windows][備忘録]Rails3レシピブックを読みながらRailsを学ぶ モデル、コントローラ、ビュー、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
いろいろ生成された! 確かに[http://d.hatena.ne.jp/kk_Ataka/20120228/1330436604:title=前回]のまとめたファイルとディレクトリの役割通りにファイルが生成されてるっぽい。
テーブルの作成
テーブルを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) ===========================================
作られたようだ。
マイグレーションとは
- DBのスキーマを変更する機能
- 一気に作らずちょっとずつ変更もできる
- rails generate migration マイグレーション名で作成可能
- ファイル名はタイムスタンプ_マイグレーション名.rbでdb/migrate/に格納
- 上記の場合はscaffoldジェネレータで全部一括で作成している様子
- db/migrate/20120229022816_create_blogs.rb
また起動
で、わくわくしながら起動。アドレスは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 等
- アクション名.フォーマット名.レンダリングエンジン名の規則で命名
- レンダリングエンジンerbは任意のテキストファイルにRubyコードを埋められるもの。Javaのjspみたいなもん?
- hamlとかでもいい?
- show.html.erb の場合はshowアクションを実行する場合show.html.erbをerbでレンダリングしてhtmlフォーマットで出力とかそういう感じかな
……ここまではなんとか。どこで何してるかとかは少しずつわかってきた。