This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/135
Ruby on Railsで、form_forのようなブロック引数を取るhelperメソッドを書く方法を紹介します。
ブロック引数を取るhelperメソッドは、例えば以下のような感じで使うとします。
<% foo do %>
test
<% end %>
この結果、以下のようにヘッダとフッタが挿入された結果が出力されるとします。
foo header
test
foo footer
このような挙動をさせるためのfooメソッドの定義は、以下のようになります。
def foo(&block)
concat('foo header', block.binding)
block.call
concat('foo footer', block.binding)
end
concatメソッドは、ERbが内部的に使用している_erbout変数に文字列を追加します。
concatメソッドの定義はこんな感じです。
def concat(string, binding)
eval("_erbout", binding).concat(string)
end
blockが持っているERbの実行コンテクストで_erbout変数にアクセスし、
_erbout.co
ncat(string)を呼び出しています。
This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/135