TOPシステム開発> 別の出力形式にも対応可能
Ruby on RailsとAdobe AIRでデスクトップアプリを作る
Ruby on RailsとAdobe AIRでデスクトップアプリを作る

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

著者:ワイズノット  増井 雄一郎   2007/9/12
前のページ  1  2  3
別の出力形式にも対応可能

   この部分を拡張するとHTMLやXML以外にも様々なフォーマットに対応することができます。例えばAjaxなどでよく使われる「JSON」フォーマットをサポートしたい場合には、6行目と7行目の間に以下の1行を追加してください。
format.json { render :json => @stickies.to_json }

   なおJSONフォーマットについては下記の連載を参考にしてください。

PerlでWeb APIを使いたおす
第6回:JSONとYAML

   これでWebブラウザから「http://localhost:3000/stickies.json」にアクセスすると、リスト3のようなJSONフォーマットのファイルをダウンロードすることができます。

リスト3:JSONフォーマットのファイル
[{attributes: {x: "0.5", updated_at: "2007-08-26 05:36:23", body: "test", id: "1", height: "100", created_at: "2007-08-26 05:36:00", width: "300", y: "0.5"}}]

   このようにscaffold_resourceで作ったコントローラは、HTML以外の様々なフォーマットに対応させることができます。

   また「http://localhost:3000/stickies」にアクセスしてDestroyリンクのソースコードをみてみましょう。ソースコードには、onclick属性の中で複雑なJavascriptが書かれています。これはprototype.jsを使い、POSTメソッドで_method=deleteを送信し、擬似的にDELETEメソッドで送信してます。


createアクションで新しいレコードを作成

   次に、新しいレコードを登録するcreateアクションをみてみましょう(リスト4)。

リスト4:createアクション

(画像をクリックすると別ウィンドウに拡大図を表示します)

   scaffold_resourceでは、出力フォーマットとしてHTMLやXMLなど複数の形式をサポートしています。しかし、入力に関しては通常のHTTPのパラメータで渡されます。そのため、レコードの生成は2行目にあるように、通常のscaffoldと同じparamsの値を渡して行います。

   出力の部分ではindexアクションと同様、出力したいフォーマットに合わせて4〜13行目のように記述します。レコードの生成が正常に行われた場合、HTMLではそのStickyのページへリダイレクトします。またXMLでは、HTTPのレスポンスコードとして201を返し、いま作られたレコードのURLをLocationヘッダで渡します。

   RESTではHTTPのレスポンスコードも大きな意味を持っています。レコードが作られた場合には通常の200ではなく、きちんとそれに合わせた201というレスポンスコードを返します。

   レコードの生成に失敗すると、HTMLの場合はもう一度入力フォームに戻り、XMLの場合はエラーの内容がXMLで返ります。

   このようにscaffold_resourceで作られたコントローラはHTTPを通じ、他のアプリケーションから操作しやすいインターフェースを提供します。RoRの次期バージョンである2.0では、このRESTに対応した「ActiveResource」という機能が提供される予定です。

   この「ActiveResource」を使うことで、外部のサーバに簡単にアクセスするためのクライアントとして、RoRアプリケーション間の連携を簡単に行うことができるようになります。

   またAdobe AIRもXMLを簡単に処理するための「E4X」という機能を持っており、RESTfulなアプリケーションとの連携が容易に行えるようになっています。


次回は

   さて次回は、今回作った付箋紙サーバにアクセスするためのAdobe AIRクライアントの作成に入ります。

前のページ  1  2  3


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


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