使用辅助方法和 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.&lt;format&gt;.&lt;builder&gt; 进行渲染。

【讨论】:

感谢 BookOfGreg。这是一种很酷的方式。我以前从未见过像这样使用渲染。您是否有一个链接来解释为什么会这样,以便我了解幕后发生的事情? This section of the Rails guide 的底部顺便提到了如何使用集合渲染。它是 Rails 约定优于配置的扩展,例如 show 操作在其控制器的视图文件夹中查找 show.html.erb。渲染 klass 首先查找 _klass.html.erb。如果您正在渲染 .json,您可以在控制器中渲染 klass,它会在控制器中调用 klass.to_json 进行响应。

以上是关于使用辅助方法和 Ruby 可枚举返回 html 格式的对象的主要内容,如果未能解决你的问题,请参考以下文章

ruby 可枚举的每个和地图

Ruby on rails 辅助方法实例变量

如何根据枚举哈希对数组进行排序并返回 Ruby 中的最大值?

C#知识点-枚举器和迭代器

Ruby 可枚举块变量赋值

如何按此哈希数组进行分组(可枚举)[Ruby,Rails]