いよいよRoR側からアプリケーションの開発にとりかかります。今回は簡単な顧客管理RIAを作成しましょう。RESTによるデータ操作の基本であるCRUD-作成(Create)、取得(Read)、更新(Update)、削除(Delele)を利用したRIAが、Flash/Dhtml(Ajax)の両方で簡単に作成できるかを体験してください。
まずお客様情報として次の項目をデータベースへ保存することにします。
項目 |
カラム名 |
タイプ |
id |
id |
integer |
郵便番号 |
zip |
integer |
住所 |
address |
string |
苗字 |
last_name |
string |
名前 |
first_name |
string |
誕生日 |
birthday |
date |
電話番号 |
tel |
string |
PCメール |
mail |
string |
携帯メール |
mobile_mail |
string |
備考 |
note |
string |
表2:お客様情報の項目
コマンドプロンプトまたはターミナルを立ち上げ、下記のコマンドを実行してください。このコマンドではデータベースにsqliteを使用し、laszlocustomerapp」という名前のRoRアプリケーションを作成しています。。
rails laszlocustomerapp -d sqlite3
次に下記のコマンドで「laszlocustomerapp」ディレクトリに移動します。
cd laszlocustomerapp
お客様情報を保存するテーブルとして「customer」を作成します。下記の「scaffold_resource」スクリプトを実行すると、customerにアクセスするために必要なコントローラ、モデル、ビューのすべてを一発で作成してくれます。ここではcustomerに含まれる「項目名:項目型」を指定しています。
script/generate scaffold_resource customer zip:integer address:string first_name:string last_name:string birthday:date tel:string mail:string mail_mobile:string note:string
モデル定義ファイルからデータベースへテーブルを作成するため次のコマンドを入力します。
rake db:migrate
ここまで完了できたら、下記のコマンドでサーバを立ち上げます。
script/server
次にWebブラウザを立ち上げ、「http://127.0.0.1:3000/customers」にアクセスします。この時点ではまだデータが存在しないので、「new customer」をクリックしてデータ作成画面に移動します。
図2:データ作成画面
追加したカラムの情報を入力できるので、ここでデータを追加します。試しに2件ほど追加してみました。
図3:データを2件追加したところ (画像をクリックすると別ウィンドウに拡大図を表示します)
OpenLaszloと連携するにはデータをXMLとして取得する必要がありますが、コードの追加は必要ありません。Webブラウザから「http://127.0.0.1:3000/customer.xml」にアクセスしてみてください。「.xml」を追加しただけで次のようなXMLデータが表示されます。
図4:表示されるXMLデータ
「http://127.0.0.1:3000/customers/1」のように、URLにIDを指定してアクセスすると、指定したデータのみを表示することができます。XML形式で取得するには「http://127.0.0.1:3000/customers/1.xml」のように「.xml」を付加するだけです。
「scaffold_resource」で生成されたコントローラはRESTfulです。RESTfulとはHTTPプロトコルのGET/POST/PUT/DELETEによってデータ操作を行います。表3で示したように、「HTTPメソッドでアクション」URLは「操作される対象」を指すという、わかりやすくシンプルな実装を利用することができます。
- GETで /customers/1 を呼ぶと表示
- POSTで /cusomers を呼ぶと作成
- PUTで /customers/1 を呼ぶと更新
- DELETEで /customers/1 を呼ぶと削除
表3:生成されたコントローラは完全にREST対応
ただし、現在のブラウザはPOSTとGETしかサポートしていないため、RoRではPUTとDELETEの発行に「_method」パラメータを追加し、「put」または「delete」を付加してPOSTでリクエストすることになります。将来、WebブラウザがPUTとDELETEに対応しても、RoR側を変更する必要はありません。このあたりにRoRの作者の潔い設計思想があらわれているのではないかと思います。
|