|
||||||||||||
| 前のページ 1 2 3 次のページ | ||||||||||||
| アクションの処理と問題の解決 | ||||||||||||
|
「newやeditは動詞なのに、URLに入っているではないか」という指摘もありますが、このRESTはモデルへのCRUD(「Create-Read-Update-Delete」の頭文字をとってレコードの追加や読み込み、更新、削除をあらわす)に対してのみ動作します。 しかしnewやeditはフォームを表示するだけでCRUD動作とはいえないため、通常と同じようにURLに動詞を入れています。 実際にこれらのアクションを実行するためには、Webブラウザのアドレスバーに「/stickies/1」を入れてアクセスします。するとGETメソッドになるので、idが1の付箋紙が表示されます。同様に、これにDELETEメソッドでアクセスすれば、idが1のStickyは削除されます。 しかし、表1では一般的には見慣れない「PUT」や「DELETE」といったメソッドが含まれています。これらはRFC(Request for Comments)でも規定されているものですが必須項目ではないため、Webブラウザによっては「<form>」タグでDELETEメソッドを指定しても、うまく動かない場合があります。 RoRではパラメータの「_method」にHTTPメソッドを指定することで、擬似的にmap.resourceのHTTPメソッドを指定しています。そのため多くのWebブラウザでは、idが1のStickyを削除したい場合は「http://localhost:3000/stickies/1」に対し、POSTメソッドで「_method=delete」を送ることで、この問題を解決することができます。 ![]() 図2:POSTメソッドで問題を解決 |
||||||||||||
| indexアクションで一覧表を表示 | ||||||||||||
|
さて、Stickiesコントローラを使ったいくつかのアクションのソースをみていきましょう。 まずは、一覧表を表示するindexアクションです(リスト2)。 リスト2:indexアクション
1: def index
ここで気になるのは2行目の「find」です。通常のscaffoldではpaginateを使ってページ処理が行われています。しかしscaffold_resourceの場合には、すべて1ページで表示されます。 さて次は、いま取得した@stickiesを表示する部分です。map.resourcesで定義されたルートでは「.(ドット)」を付けることでフォーマットを指定できます。最初に紹介した通り、XML形式ですべてのStickyを取得したい場合には「http://localhost:3000/stickies.xml」のようにアクセスします。この例では、最後の.xmlがフォーマットを指定していることになります。 4行目の「respond_to」は、上記のフォーマット指定やHTTPのAcceptヘッダをみて、処理を振り分ける命令です。 4〜6行目のブロックの中で「format.フォーマット名 { 処理 }」と定義することで、そのフォーマットにあった処理が実行されます。処理のブロックを省略すると、そのフォーマットにあったデフォルトテンプレートファイルがレンダリングされます。 なお、フォーマットに何も指定しなかった場合には、HTMLファイルとして処理されます。5行目で書かれているように処理を省略した場合、「index.rhtml」のレンダリングが実行されます。 このindexアクションでは、HTML以外にXMLフォーマットに対応しています。ActiveRecordのオブジェクトには、XMLで出力するためのto_xmlが実装されています。また出力するためのrenderメソッドでもXMLの出力をサポートしています。 |
||||||||||||
|
前のページ 1 2 3 次のページ |
||||||||||||
|
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||


