0

私の以前の質問の後HTML を生成するヘルパー関数の開発: ネストされた content_tag()s またはパーシャルを使用する必要がありますか? content_tag()入れ子になった呼び出しの代わりにテンプレートを使用するように、より複雑な HTML 生成ヘルパー関数のいくつかを書き直す必要があると確信しています。

だからここに私の元のヘルパーがあります:

def bootstrap_navlist(&block)
  classes = ['nav', 'nav-list']

  content_tag(:ul, class: classes.join(' ')) do
    capture(self, &block)
  end
end

そして、それが私が今パーシャルを使って思いついたものです:

def bootstrap_navlist(&block)
  render partial: 'bootstrap/navlist'
end

# views/bootstrap/_navlist.html.erb
<ul class="<%= ['nav', 'nav-list'].join(' ') %>">
  How do I output the block here??
</ul>

ブロックは次のようになりますが、好きな HTML にすることができます。

= bootstrap_navlist do |navlist|
  = navlist.item 'Home', '#'
  = navlist.sublist 'Meine Favoriten', '/favorites' do |sublist|

ご想像のとおり、ブロックをビューに出力する方法がわかりません。ヘルパーでキャプチャして、:local変数として渡すだけですか? それとももっと一般的な方法がありますか?

どうもありがとう。

4

1 に答える 1

2

これは、コンテンツ タグが深くネストされておらず、ヘルパーとして妥当なケースです。

ヘルパーとパーシャルは次のようになります。

def bootstrap_navlist(&block)
  render template: 'bootstrap/navlist', :locals => { :block => block }
end


<ul class="nav nav-list">
  <%= capture(self, &block) %>
</ul>
于 2012-09-22T13:06:15.303 に答える