at posts/single.html

時刻の整形をビューからヘルパーへ

さらにコードの見直し。 生成時刻と更新時刻を表示する時に、時刻のフォーマットを整形しているんだけど、これをビュー (_page.rhtml) に直接書いていた。 ビューの中に nil チェック(if page.created の箇所)が入っているし、時刻のフォーマットを変えるたびに複数の箇所を修正しないといけなくて面倒。

created: <%= page.created_on.strftime('%Y-%m-%d %H:%M') if page.created %>
updated: <%= page.updated_on.strftime('%Y-%m-%d %H:%M') if page.updated %>

Rails では、ビューの見栄えを整えるために、ヘルパーという仕組みが用意されていて、ここで定義したメソッドはビューから直接呼べるようになってる(ヘルパーは module なので、きっとビューに include されるんだろう)。 昨日使った文字を切り取る truncate メソッドも、デフォルトで用意されているヘルパーの一つみたい。

ヘルパーを独自に用意する場合は、 app/helpers/note_helper.rb を編集する。 とりあえず、時刻を整形する show_time メソッドを追加する。

module NoteHelper
  def show_time(time)
    time ? time.strftime('%Y-%m-%d %H:%M') : ''
  end
end

ビュー (_page.rhtml) 側はヘルパーを使うように修正する。

created: <%=h show_time(page.created_on) %>
updated: <%=h show_time(page.updated_on) %>

見た目や動きは変わらないけど、コードはすっきりした。 リポジトリにも登録して、おしまい。

関連する日記