Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2007-10-20

[Rails]helperとcontent_tag()で書き直してみた

もろはしさんからコメントを頂いたのでさっそくヘルパーとして実装してみた。 content_tag()は知らなかったので今まで使っていなかったよ……。

module ApplicationHelper
  def action_help
    html = begin
             render :partial => "helps/#{controller_name}_#{action_name}"
           rescue ActionView::TemplateError
             $!.to_html
           rescue ActionView::ActionViewError
             nil
           end
    html ? content_tag(:div, html, :class => :help) : ''
  end
end

ビューからの呼び出しは次のようになる。

<%= action_help %>

これまでヘルパーはあまり使ってなかった。というのはERBにガンガンロジック書くのが気にならないので。自分しか編集しないと割り切ってしまえば、ERBに何が書いてあってもいいかなと。でも今回の件はわざわざrhtmlを作るより、ヘルパーにメソッドとして定義するのが正解だと思う。

to_htmlというは、独自の拡張で、application_helper.rb(ここでいいのか?)に次のように書いてある。

class Exception
  def to_html
    "<h2>#{self.class}</h2>\n#{message}\n<pre>#{backtrace.join("\n\t")}</pre>"
  end
end

ちなみにビュー好きになったのは、勉強会でもろはしさんが「表示に関することならビューでやってしまう」おっしゃっていたことにインスパイやされた結果です。