在 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
;)
阅读更多:
- stay-safe-while-using-html-safe-in-rails-9e368836fac1
- everything-you-know-about-html_safe-is-wrong
- proper use of html_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
固有的安全问题。
我是 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
;)
阅读更多:
- stay-safe-while-using-html-safe-in-rails-9e368836fac1
- everything-you-know-about-html_safe-is-wrong
- proper use of html_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
固有的安全问题。