• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

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.concat(string)を呼び出しています。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/135

posted by Png genki on Thu 7 Dec 2006 at 04:49

Comments:

or Preview
Social Bookmarks
  • Delicious
  • B_entry83
  • Clip_16_12_w
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ