Rails3レシピブックを読みながらRailsを学ぶ モデル、コントローラ、ビュー、Railsの規約など

[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フォーマットで出力とかそういう感じかな

……ここまではなんとか。どこで何してるかとかは少しずつわかってきた。

関連記事(この記事の初版より古い記事はリンクがグレーで表示されます)

  1. 2012/02/28 [Ruby] [Windows] [Rails] Rails3レシピブックを読みながらRailsを学ぶ
  2. 2012/10/01 [Ruby] [Bundle] [Windows] bundle execを省略したいのでバッチを作った(Windows版)
  3. 2012/07/17 [Ruby] [Windows] [Redmine] Windows版Redmineをサービスに登録してブート時に起動させる(宿題あり)
  4. 2012/04/20 [Ruby] [Windows] ZenTestで実行したRSpecの結果をGrowlで通知してくれるようにした
  5. 2012/03/27 [Windows] [Jenkins] [Ruby] simplecovとsimplecov-rcovを使ってJenkinsでカバレッジを確認
  6. 2012/03/20 [Windows] [Jenkins] [Ruby] Windows環境用にrcovをビルドしなおす手順
  7. 2012/02/20 [Ruby] [Windows] Rubyの実行ファイルを作成するExerbとOcraを試してみた
  8. 2013/09/03 [Ruby] [Rails] Ruby1.9.3のWebrickで出るCould not determine content-length...エラーを消す方法(2.0.0では解決済)
  9. 2013/08/20 [Ruby] [Rails] [Redmine] Rails3のログ出力にANSIカラーコードを使用しない設定
  10. 2011/09/30 [Java] [Windows] [Ruby] .msgファイルをパースして中から添付ファイルを抜き出す
  11. 2011/09/07 [Ruby] [Redmine] [SQLite3] [Windows] Redmineのプラグイン作成のための備忘録と、時々SQLite3
  12. 2011/08/23 [Ruby] [Windows] MicrosoftOutlookで消せなくなったフォルダをwin32ole経由でRubyから消してみる
  13. 2011/07/09 [Windows] [Ruby] MicrosoftOutlookのメールをRuby(win32ole)で操作する! その2
  14. 2011/05/17 [Ruby] [Windows] MicrosoftOutlookのメールをRubyで操作する!
  15. 2011/05/01 [Ruby] [Redmine] [Windows] Redmineインストール備忘録(Windows)