5

我写了以下助手:

def section_to_html (block)
      case block[0].downcase
      when "paragraph"
        block.shift
        block.each do |value|
          return content_tag(:p, value)
        end
      end
  end

目前正在解析这些数组。

["paragraph", "This is the first paragraph."]
["paragraph", "This is the second.", "And here's an extra paragraph."]

它返回:

<p>This is the first paragraph.</p>
<p>This is the second.</p>

有没有办法积累 content_tag?所以它返回:

<p>This is the first paragraph.</p>
<p>This is the second.</p>
<p>And here's an extra paragraph.</p>

我现在唯一的解决方案是使用部分代替。但是一旦我开始在案例条件中添加更多内容,这将变得非常混乱。

4

2 回答 2

6

使用#concat:

http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-concat

这个线程可能会有所帮助:

rails,如何使用 content_tag 在助手中构建表?

于 2013-03-31T11:21:32.147 回答
6

由于您想返回一系列标签而不必将它们嵌套在另一个标签中,并且您正在处理来自数组的内容,因此可以解决问题:

paragraphs = %w(a b c d e) # some dummy paragraphs
tags = html_escape('') # initialize an html safe string we can append to
paragraphs.each { |paragraph| tags << content_tag(:p, paragraph) }
tags # is now an html safe string containing your paragraphs in p tags

content_tagActiveSupport::SafeBuffer返回(继承自String)的一个实例。调用html_escape空字符串将使该字符串成为 的实例ActiveSupport::SafeBuffer,因此当您将content_tag调用的输出附加到它时,您将获得 html 安全字符串中的所有标签。

(我今天在尝试解决同样的问题时发现了这个问题。我的解决方案对于最初的问题来说为时已晚,但希望能对其他人有所帮助!)

于 2018-11-27T18:46:43.353 回答