扶手:重构HTML生成辅助方法来使用部分 - 如何有使用块?(Rails: Refactoring

2019-09-22 18:41发布

之后我先前的问题产生HTML开发辅助功能:我宁愿使用嵌套content_tag()S或谐音? 我现在相信重写我的一些更复杂的HTML生成辅助函数使用模板来代替嵌套content_tag()调用。

因此,这里是我的原始助手:

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变量? 还是有一种较为常见的方式是什么?

非常感谢。

Answer 1:

这是内容的标签并没有深度嵌套的将是合理的作为辅助的情况下。

你的助手,部分是这样的:

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


<ul class="nav nav-list">
  <%= capture(self, &block) %>
</ul>


文章来源: Rails: Refactoring HTML producing helper method to use a partial - how to use blocks there?