TOPシステム開発> アクションの処理と問題の解決
Ruby on RailsとAdobe AIRでデスクトップアプリを作る
Ruby on RailsとAdobe AIRでデスクトップアプリを作る

第2回:新機能「scaffold_resource」とは?

著者:ワイズノット  増井 雄一郎   2007/9/12
前のページ  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」を送ることで、この問題を解決することができます。

POSTメソッドで問題を解決
図2:POSTメソッドで問題を解決


indexアクションで一覧表を表示

   さて、Stickiesコントローラを使ったいくつかのアクションのソースをみていきましょう。

   まずは、一覧表を表示するindexアクションです(リスト2)。

リスト2:indexアクション
1:  def index
2:    @stickies = Sticky.find(:all)
3:
4:    respond_to do |format|
5:      format.html # index.rhtml
6:      format.xml  { render :xml => @stickies.to_xml }
7:    end
8:  end

   ここで気になるのは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  次のページ


株式会社ワイズノット 増井 雄一郎
著者プロフィール
株式会社ワイズノット  増井 雄一郎
PukiWikiなどのオープンソース活動を経て、2005年からRuby on Railsに的を絞り、2006年はRubyに関する仕事のみで生計をたてる。これまでのフリー活動から転身し、アメリカ行きを目指して2007年4月に(株)ワイズノットに入社。クロスメディア事業部でSaaSプラットフォームの構築に従事。現在の興味はテキストマイニング。


INDEX
第2回:新機能「scaffold_resource」とは?
  Ruby on Railsの新機能で付箋紙を作る
アクションの処理と問題の解決
  別の出力形式にも対応可能