Ruby on Rails3 アプリケーションプログラミング の読書メモ 3章 Scaffolding機能によるRails開発の基礎


読みはスキャフォールディング

  • CRUD機能を簡単に実現できる
    • create, update, read, delete

CRUDって何?

すべてのアプリケーションは、一つの目的を持っている。ビジネスオブジェクトを支ることだ。(Maintaining business objects) 
基本的に、フォームやリストやその他のWebのUI要素を使って、created、displayed、updated and deletedがなされるモデルを扱えるということだ。

もし君のRailsアプリがビールを管理するものなら、BeersContorollerにshow、update、createといったアクションを書くだろう。
これらのアクションは、おおかたフォームを表示したり、モデルに属性を保存したりする。

ブラウザでこれらのフォームにアクセスするのに、次のようなルート(routes)を書くだろう。

    /beers/show/:id
    /beers/new
    /beers/delete/:id

そして、先に述べた、対応するコントローラのアクションにマッピングさせるだろう。

これがいわゆるCRUDインターフェースだ。記述的なルートやフォームに大抵は退屈なコードを持ったアプリケーションだ。
これには一つの運命がある。Createされ、Retrieveされ、Updateされ、Deleteされるという運命だ。

いいかい、これがCRUDだ!
scffold を生成する
$ rails generate scffold books field:type...
  • booksの部分が今回生成される、コントローラ/モデルの名前
生成されるファイル
  • /app/models/book.rb
  • /app/controllers/books_controller.rb
  • /app/views/books/index.html.erb
  • /app/views/books/edit.html.erb
  • /app/views/books/show.html.erb
  • /app/views/books/new.html.erb
  • /app/views/books/_form.html.erb
  • /app/helpers/books_helper.rb
  • /public/stylesheets/scffold.css
  • /db/migrate/YYYYMMDD_create_books.rb
  • /test


ちなみに、そこからモデルだけ削除したい場合...

$ rails destroy model book 
3.1.2 自動生成されたルートを確認する


追加された、ルートファイルの中身
config/routes.rb

  resources :books
  • resources は、CRUDの為のルートの設定


rake routes コマンドで、ルートの設定を確認

$ rake routes
    books GET    /books(.:format)          {:action=>"index", :controller=>"books"}
          POST   /books(.:format)          {:action=>"create", :controller=>"books"}
 new_book GET    /books/new(.:format)      {:action=>"new", :controller=>"books"}
edit_book GET    /books/:id/edit(.:format) {:action=>"edit", :controller=>"books"}
     book GET    /books/:id(.:format)      {:action=>"show", :controller=>"books"}
          PUT    /books/:id(.:format)      {:action=>"update", :controller=>"books"}
          DELETE /books/:id(.:format)      {:action=>"destroy", :controller=>"books"}
ヘルパメソッドの話


link_to メソッド


URLにモデルのインスタンスが渡された場合、idを取りに行く
以下のようにすると、books/#{book.id} へのリンクになる

link_to('詳細', book) # bookは、Bookモデルのインスタンス
  • confirmオプション
    • ページ移動前に、確認ポップアップを出す
  • methodオプション
    • GET以外のメソッドを指定できる
    • DELETE等も指定できるけど、ブラウザが対応していないので、実際はPOSTでメソッドの情報を別に送っている


redirect_to メソッド

redirect_to(url, option)
  • こっちもモデルのインスタンスを入れられる
  • noticeオプションは、viewのnotice変数に格納される
  • ちょっとした情報、メッセージを格納するのに便利


アクション_コントローラー_path

new_book_path # /books/new
show_book_path(12) # /books/12


renderメソッドに、statusオプションをつけると、HTTPステータスを found 以外にできる


知らなかった


head メソッド


HTTPステータスだけを返す。本文は返さない