Rails从Helper模块返回多个content_tags

时间:2013-03-31 04:40:19

标签: html ruby-on-rails ruby module helper

我写了以下帮助:

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>

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

2 个答案:

答案 0 :(得分:5)

答案 1 :(得分:1)

由于您要返回一系列标签而不必将其嵌套在另一个标签中,并且您正在处理来自数组的内容,因此可以完成此操作:

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_tag返回ActiveSupport::SafeBuffer(从String继承)的实例。在空字符串上调用html_escape将使该字符串成为ActiveSupport::SafeBuffer的实例,因此,当您将content_tag调用的输出附加到它时,您将在html安全的所有标签中串。

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