1

我正在使用 Rails 3。我正在尝试在助手中执行此操作:

def headers collection
  collection.each do |col|
     content_tag(:th, col.short_name)
  end
end

如您所见,这个想法是执行 content_tag 来<th>为集合中的每个元素生成一个标签。这不起作用,因为 HTML 是由 Rails 提供的安全的,这使得它不能作为 HTML 工作。

如果我将其更改为:

def headers collection
  collection.each do |col|
    concat (content_tag(:th, col.short_name))
  end
end

这效果更好。我在 HTML 中得到了正确的标记,但在此之前我得到了所有标记 HTML 安全。所以我认为我很接近。

我知道还有其他方法可以做到这一点,但我想尝试以正确优雅的方式做到这一点。我错过了什么?

4

2 回答 2

1

您可以使用注入并以 html_safe 空字符串开头。

def headers collection
  collection.inject("".html_safe) do |content, col|
    content + (content_tag(:th, col.short_name))
  end
end
于 2012-08-24T22:43:38.857 回答
0

聚会迟到了,但我今天遇到了这个问题并用 解决了它safe_join,所以:

def headers_collection 
  safe_join(collection.map { |item| content_tag(:th, item.short_name) })
end
于 2018-05-25T09:48:53.397 回答