ruby-on-rails - content_tag 使用 concat 处理多个部分

标签 ruby-on-rails ruby-on-rails-3 helper

我正在使用 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 安全标记。所以我想我已经很接近了。

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

最佳答案

您可以使用注入(inject)并以 html_safe 空字符串开始。

def headers collection
  collection.inject("".html_safe) do |content, col|
    content + (content_tag(:th, col.short_name))
  end
end

关于ruby-on-rails - content_tag 使用 concat 处理多个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12117466/

相关文章:

ruby-on-rails - "Postmark::InvalidMessageError: Provide either email TextBody or HtmlBody or both."用于 rails 3.2 应用程序

ruby-on-rails - ffi 上的 bundle 更新失败

ruby-on-rails - 检查关系是否存在 has_one mongoid

ruby-on-rails - 安装发动机的 RSpec 测试路线

ruby-on-rails - 如何在 Rails 中编写增加天数的助手?

facebook - Like Box - 显示 "check in' s”而不是最近的帖子?

ruby-on-rails - 如何对所有 Controller 使用around_action,但具有某些操作的特定 Controller 除外

ruby-on-rails - Carrierwave 与 Dropzone JS。是否可以将它们与嵌套属性一起使用?

php - 在一个页面上组合多个 Controller ,而无需从 Controller 加载 Controller

ruby-on-rails - 带 erb 的 Sass 无法编译