在 Rails 应用程序中创建 html 标签包装器

Create html tag wrapper in Rails application

我是 Rails 的新手,我想创建一个辅助函数来使用我传递的任何内容和 returns 包装的元素。我试图使用 content_tag / tag 之类的东西,但它不会涵盖我的所有用例。它应该创建 div 并将其包装在我作为参数传递的元素上。在大多数情况下,它只是嵌套 HTML。我正在寻找类似下面代码的东西,它会消耗任何东西,如果它也能与 render 方法一起使用,那就太好了。

辅助方法:

def helper_method(content)
  content_tag(:div, content)
end

在 ERB 文件中:

helper_method('<span><p>Something</p></span>')

在 React 中我会直接传递 "children"。我应该如何在 Rails 中处理它?

您将完全按照您描述的方式使用。您可以通过将字符串设置为 return HTML 来自助手的安全字符串 html_safe

示例:

def helper_method content
  content_tag(:div, content.html_safe)
end

请注意,这可能会引入安全问题。您不想在用户输入的字符串上调用 html_safe,因为脚本会执行。顾名思义,它并不是真正的 safe ;)

阅读更多:

对于理想方法,使用sanitize:

def helper_method content
  content_tag(:div, sanitize(content))
end

捕获块,并将其传递给 content_tag,如下所示:

def something(css_class, &block)
  content_tag(:div, class: css_class, &block)
end

在这样的视图中使用它:

<%= something('my-css-class') do %>
  ...your content here...
<% end %>

这避免了 .html_safe 固有的安全问题。