Rails2.0の足回りと中級者への道

第3回 Rails2.0で作るRESTfulアプリケーション(後編)

この記事を読むのに必要な時間:およそ 6 分

ERb View

最後に,ERbのviewです。

app/views/links/index.html.erb

<table width="100%"> 
<tr>
<% if @links.size > 0 %>
<td width="70%">
<h1>links</h1>
<table>
<% for link in @links %>
  <tr>
    <td><%= link_to link.url, link.url %></td>
    <% if   current_user_id == params[:username] %>
    <td><%= link_to 'edit', edit_link_path(params[:username], link) %> /</td>
    <td><%= link_to 'destroy', link_path(params[:username], link), :confirm => 'Are you sure?', :method => :delete %></td>
    <% end %>
  </tr>

  <tr>
    <td colspan="3"><small><%=h link.notes %></small></td>
  </tr>
  <tr>
    <td colspan="3"><small>to <%=h link.tag_names %></small></td>
  </tr>
<% end %>
</table>
</td>
<% end %>

<% if @tags.size > 0 %>
<td width="30%" valign="top" bgcolor="#dddddd">
<h1>Tags</h1>
<table>
<% for tag in @tags %>
  <tr>
    <td><%= tag.cnt%> <%= link_to tag.name, tag_url(params[:username], tag) %></td>
  </tr>
<% end %>
</table>
</td>
<% end %>

</tr>
</table>
<br />

リンク一覧を表示する,index.html.erbです。

ここではURIの変更に関連するlink_pathの修正に注意が必要です。link_pathでは,path_prefixで指定した:usernameをパラメータから取得し,@linkオブジェクトとあわせて2つの引数を渡しています。また「:method=>:delete」としてHTML Formから疑似HTTP DELETEメソッドを発行するよう指定しています(hiddenフィールドに設定されます⁠⁠。これは,GETとPOSTしかできないWebブラウザ制限へのRESTful URIでの対処法です。更新時,edit.html.erbのform_forでは同様に「:method=>put」を指定しています。

index.html.erbでは,Linkモデルで作成したtag_names属性と,Tagモデルで作成したcnt属性を利用しています。

画面イメージとソースアーカイブ

次の画面は,リンク一覧です。リンク下部にタグの表示と,右のカラムにはタグ一覧が件数とともに表示されています。

リンク一覧

リンク一覧

次の画面は,タグ一覧です。タグ付けされたリンクの一覧が表示されます。

タグ表示

タグ表示

ソースコードアーカイブ

以下が今回改良したminiciousソースアーカイブです。

ちなみに最終段階においてもminiciousにはユーザ管理の画面はありません。今回作成したminiciousは,RESTとRoy Fieldingに敬意を表して,Apache License 2.0としますので,興味を持たれた方は機能追加してみてください。

まとめと展望と次回予告

今回は,Rails2.0の機能を用いてRESTfulにブックマークアプリケーションを拡張しました。

今回作成したアプリケーションは,単体の機能だけみるとあまりに簡素過ぎるアプリケーションです。しかし,RESTfulなアプリケーションを作成する最大の魅力は,統一インターフェースによる拡張性や接続性の拡大によるシナジー効果にあります。

例えば,RESTfulにサービスのインターフェースを統一することで,RESTful Railsアプリケーションであれば同じライブラリで一括して対応可能なことが期待できます。そういったRESTful Railsに対応するRubyにおけるライブラリ例が先に述べたActiveResouceです。

残念ながら,Webブラウザ上で利用可能な,JavaSriptでのActiveResouceに相当するライブラリは現状ありませんが,そういったライブラリを利用する,RESTful RailsへのWebブラウザアドオンなどを考えてみるのも楽しいのではないでしょうか。

Railsによるアプリケーション作成の実例はこの辺にしまして,次回は,Railsで製品レベルのWebアプリケーションを作成する際に重要となるパフォーマンスの問題について考えていきたいと思います。

著者プロフィール

鎌田達哉(かまだたつや)

SI企業勤務。10年ほど前にはじめて自分で行ったプログラミングはRubyによるものであったが,語ってもにわかには信じてもらえないような紆余曲折を経て現在に至る。現在は,JVM上の言語実装に興味あり。ありがちですが,Scalaにはまり中。