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ステータスだけを返す。本文は返さない