【问题标题】:How can I yield more than one partial in a block?如何在一个块中产生多个部分?
【发布时间】:2015-12-08 15:04:11
【问题描述】:

我最近问了一个类似的问题,尽管它旨在将多个块作为参数。这个问题比较直接。

我遇到的问题是,我有一个辅助方法,我希望能够将内容作为块传递以进行渲染。但是,如果我添加多个部分,则只会呈现块中的最后一个。方法如下。

  def bootrap_panel(title, klass = 'primary', &block)
    content_tag(:div, panel_heading(title) + panel_body(&block), class: 'panel panel-' + klass)
  end

  def panel_body(&block)
    content_tag(:div, yield, class: 'panel-body') if block_given?
  end

这里是我遇到的一个问题示例,页面上仅显示最后一部分。

=bootrap_panel 'Panels', 'primary' do
  - render "dynamic_panels/partials/new"
  - render "dynamic_panels/partials/dynamic_panels", dynamic_panels: dynamic_page.dynamic_panels

我的第一个想法是,我应该先将部分​​输出到数组或其他东西,然后显示(我不确定我是否能够做到)。其次,我使用“-”运算符而不是“=”运算符在 haml 中显示 ruby​​ 内容。为什么?

【问题讨论】:

  • 您是否尝试在您的render 通话中使用= 而不是-?如果是,发生了什么?
  • 如果我切换它们,那么面板不会显示,但两个部分都会显示!
  • 那你为什么不把它们都做成=

标签: ruby-on-rails ruby haml


【解决方案1】:

将块 itsef 而不是它的返回值传递给 content_tag:

content_tag(:div, class: 'panel-body', &block)

其他方法:

content_tag(:div, capture(&block), class: 'panel-body')

【讨论】:

    猜你喜欢
    • 2011-03-19
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多