«前の日記(2006-10-08 (日)) 最新 次の日記(2006-10-10 (火))»  

まちゅダイアリー


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 のいい所かも。

Tags: Rails Ruby

カート

天気のいい三連休の締めくくりとして、ミニサーキットに行ってきた。 四輪、二輪、カートと順に走る姿に圧倒される。

circuit

んで、レンタルカートに初挑戦。 初心者向けのカートだったんだけど、全く乗りこなせなかった。

カートに挑戦

でも、楽しかった。 また行きたいな。

Tags: Life

秋の夜長に

何を思い立ったのか、急に 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 と戯れてる。

Tags: Life