AWDwR "Chapter17 Action View" つづき

ここ3日ほどメッチャチカレマチタヨ…。ちょっと間があいちゃったけど気を取り直して続き。

Formatting Helper

Railsにはビルトインされたヘルパメソッドがたくさんあるので紹介するよ。詳しくはRDocを見てね。

<%= distance_of_time_in_words(Time.now, Time.local(2005, 12, 25)) %>
  248days
<%= time_ago_in_words(Time.local(2004, 12, 25)) %>
  116days
<%= human_size(123_456) %>
  120.6KB
<%= number_to_currency(234.56, :unit => "CAN$", :precision => 0) %>
  CAN$235
<%= number_to_percentage(66.66, :precision => 1) %>
  66.7%
<%= number_to_phone(2125551212, :area_code => true, :delimiter => " ") %>
  (212) 555 212
<%= number_with_delimiter(12345678) %>
  12,345,678
<%= number_with_precision(50.0/3, 1) %>
  16.7

他にも便利なメソッドがあるよ。

<%= debug(params) %> # paramsをYAMLで表示する
<%= simple_format(@trees) %> # 文字列をフォーマットする
<%= excerpt(@trees, "lovely", 8) %> # 抜粋する
<%= highlight(@trees, "tree") %> # 強調する
<%= truncate(@trees, 20) %> # 切り取る
<%= pluralize(2, "person") %> # 複数形にする

Linking to Other Pages and Resources

ActionView::Helpers::AssetTagHelper, ActionView::Helpers::UrlHelperモジュールには外部のリソースを参照するヘルパメソッドがたくさんあって、代表的なのがlink_to()メソッド。パラメタの1番目にはリンク名、2番目にはリンクのターゲット、3番目にはHTMLの属性を記述する。3番目のパラメタに:confirmを指定すると確認のダイアログボックスを表示してくれる。

<%= link_to "Add Comment", :action => "add_comment" %>

<%= link_to "Delete", {:controller => "admin", :action => "delete", :id => @product},
                      {:class => "redlink", :confirm => "Are you sure?"} %>

button_to()メソッドはボタンを表示する。それ自身がフォームになるのでリンクよりもいいけど、他のフォームの中では使えない。link_to_unless_current()メソッドはリンク名が現在のページのアクション名と同じならリンクを張らない。メニューなんかに使うと便利だね。

image_tag()メソッドもあるよ。画像のパスが/で始まらない場合は/images以下にあると仮定、また拡張子がない場合は.pngと仮定。

<%= image_tag("dave", :class => "bevel", :size => "80x120" %>

それからそれからmail_to()メソッドもあるよ。オプションの:encode => "javascript"を指定するとJavascriptを使ってmailtoリンクをスパイダに見つかりにくくしてくれる。

<%= mail_to("support@foo.com", "Contact Support", :subject => "Support", :encode => "javascript") %>

さらにさらにstylesheet_link_tag()メソッド、auto_discovery_link_tag()メソッドもあるよ。他にもJavascriptのヘルパメソッドもあるけどそれはChapter18のThe Web, V2.0で。

Pagination

ページめくりの機能まであるそうな。へぇ。

まずはコントローラで以下のようにする。

def user_list
  @user_pages, @users = paginate(:users, :order_by => 'name')
end

@user_pagesはページめくりオブジェクト。@usersはそのページに表示するオブジェクトの配列。paginateはpageパラメタで指定されたページのオブジェクトを返す。で、ビューは以下のようにする。

<table>
  <% for user in @users %>
    <tr><td><%= user.name %></td></tr>
  <% end %>
</table>
<hr>
<%= pagination_links(@user_pages) %>
<hr>

pagination_links()メソッドは他のページへのリンクを表示する。


次回につづくのであった。