使用辅助方法和 Ruby 可枚举返回 html 格式的对象
Posted
技术标签:
【中文标题】使用辅助方法和 Ruby 可枚举返回 html 格式的对象【英文标题】:Using helper method and Ruby enumerable to return html formatted objects 【发布时间】:2016-08-07 23:27:56 【问题描述】:为这个菜鸟问题道歉,但我似乎无法弄清楚如何使用 ruby 可枚举和帮助器返回格式化的 html 对象。我想删除括号。无论如何返回格式化对象与基于对象数组的可枚举?
帮手
module PostsHelper
def display_posts(posts)
if posts.any?
raw(@posts.map |p| raw("<div class='post_text_box'>#p.body</div>"))
end
end
end
HTML.erb
<div id="post_feed">
<%=display_posts(@posts)%>
</div>
浏览器输出
picture of array of formatted html
【问题讨论】:
【参考方案1】:建议您不要 join.html_safe
如上一个答案所说,在 Rails 中,因为如果您的底层字符串不安全,可能会受到注入攻击。
请改用safe_join。它将保持要输出的字符串的“安全性”。
if posts.any?
safe_join( @posts.map |p| "<div class='post_text_box'>#p.body</div>".html_safe )
end
在你的情况下,我会制作一个名为 _post.html.erb 的部分,其中包含
<div class='post_text_box'><%= post.body %></div>
在您的 thing.html.erb 文件中
<%= render @posts %>
然后 Rails 会自动迭代 @posts
到 _post.html.erb
并为你加入它们。
这都是Rails's Convention over configuration 的一部分,如果你render klass
,它首先会寻找_klass.<format>.<builder>
进行渲染。
【讨论】:
感谢 BookOfGreg。这是一种很酷的方式。我以前从未见过像这样使用渲染。您是否有一个链接来解释为什么会这样,以便我了解幕后发生的事情? This section of the Rails guide 的底部顺便提到了如何使用集合渲染。它是 Rails 约定优于配置的扩展,例如show
操作在其控制器的视图文件夹中查找 show.html.erb
。渲染 klass 首先查找 _klass.html.erb。如果您正在渲染 .json,您可以在控制器中渲染 klass,它会在控制器中调用 klass.to_json 进行响应。以上是关于使用辅助方法和 Ruby 可枚举返回 html 格式的对象的主要内容,如果未能解决你的问题,请参考以下文章