2006-10-09 (月)
■ Rails に(再)挑戦 7日目 - 一覧表示で本文の一部だけ表示 (Read More)
2日目に一覧表示 (list) と個別表示 (show) でデザインを共有したけど、今は一覧表示のときも本文を全て表示するようになってる。 これを、本文の一部だけ表示して、残りは Read More (個別表示へのリンク) とする。
まずはビューから修正する。 一覧表示 (list.rhtml) と検索結果表示 (search.rhtml) から、 _page.rhtml に対してローカル変数 short (値は true) を渡す。 _page.rhtml では、 short が true だった時に本文の一部だけを表示するようにする。
-<%= render(:partial => 'page', :collection => @pages) %>
+<%= render(:partial => 'page', :collection => @pages,
+ :locals => { :short => true }) %>
_page.rhtml では、ヘルパーの parse メソッド (NoteHelper#parse) を呼び出す時に、 short 変数を渡すように修正する。 同時に、第一引数もページ本文の文字列 (page.body.sub) から、ページオブジェクト (page) に変更した。 これは、 Read More で個別表示のリンクを表示するために、ページの id が必要なため。
updated: <%=h show_time(page.updated_on) %>
</div>
- <%= parse(page.body.sub(/^.*\n/, '')) %>
+ <%= parse(page, short) %>
</div>
ヘルパー (note_helper.rb) では、 short == true の場合に本文の一部だけを表示する。 具体的には、見出しの行(先頭が「!」で始まる行)以降を、 Read More で置き換えている。
def parse(page, short = false)
level = 3
source = page.body.sub(/^.*\n/, '')
if short
source.sub!(%r|^!.*|m) do
href = url_for(:action => 'show', :id => page.id)
"([[Read More...|#{href}]])"
end
end
html = HikiDoc.new(source, :level => level).to_html
さっきも書いたけど、 Read More は個別表示へのリンクとする。 個別表示のリンクは、 url_for(:action => 'show', :id => page.id) で取得できる。 これを、 HikiDoc スタイルのリンク文字列にしている。 例えば、 id が 1 のページだったら、以下のようになる。
[[Read More...|/note/show/1]]
これを HikiDoc で変換するとこうなる。
<a href="/note/show/1">Read More...</a>
これでリポジトリにコミット。 リビジョン16か。
少し気になるのは、ヘルパーにパース関連のロジックが集中してきたこと。 最初は Page モデルに to_html メソッドを追加しようかと思ったけど、モデルにビューの処理を書くのも変なので、ヘルパーに書いている。 デフォルトではモデルから url_for は呼べないし。
まぁ、とりあえずコントローラやヘルパーに処理を書いて動かしてしまって、後で処理の場所を移してもいいし。 こうやって少しずつ機能を追加していけるのが、 Rails のいい所かも。
■ カート
天気のいい三連休の締めくくりとして、ミニサーキットに行ってきた。 四輪、二輪、カートと順に走る姿に圧倒される。
んで、レンタルカートに初挑戦。 初心者向けのカートだったんだけど、全く乗りこなせなかった。
でも、楽しかった。 また行きたいな。
■ 秋の夜長に
何を思い立ったのか、急に Jazz が聴きたくなった。
頭と身体が疲れていて、リラックスしたがっているのかもしれない。
iTMS や Amazon でフラフラと検索していたら
ベスト・ジャズ100(オムニバス/メル・トーメ/ケイ・スター/ダイナ・ショア/ジャック・ジョーンズ/カーメン・マクレエ/アニー・ロス/スー・レイニー/ジャック・ティーガーデン/ジューン・ハットン/イリアーヌ)の評判が高かったので、勢いで注文しちゃった。
数日前に届いてからずっと聴いているんだけど、当たりだったかも。 まず、知っている曲が多いのが嬉しい。 音楽にそれほど詳しい訳じゃない(ましてや Jazz はなおさら)けど、それでも分かる曲が多数。
- Fly Me To The Moon … エヴァンゲリオンのエンディングテーマとしても有名。宇多田もカバーしてたね。
- When You Wish You Upon A Star … ディズニーの「星に願いを」。
- Over The Rainbow … これもディズニー。元はオズの魔法使いの主題歌らしい。
- Sing Sing Sing … 映画 Swing Girl のアレ。古い音源なのでモノラル録音なのが残念。
- My Favorite Things … サウンド・オブ・ミュージックの曲。ちょっと弾けたアレンジになってる。
- Don't Worry, Be Happy … 缶コーヒー Roots の CM 曲。
- Moon River … よく聴くと思ったら、「ティファニーで朝食を」の主題歌らしい。
- Can't Take My Eyes Off You … 「君の瞳に恋してる」。Tommy february もカバーしてた。
- Time After Time … シンディ・ローパーの CD で初めて聴いたなぁ…。
6枚組で3,500円だし、 Jazz の入門としては最適なのかも。 ここ数日の夜は、この CD を聞きながら Rails と戯れてる。

