Ruby on rails 3.1 Rails 3.1.4-渲染:文本

Ruby on rails 3.1 Rails 3.1.4-渲染:文本,ruby-on-rails-3.1,Ruby On Rails 3.1,我正在将我的rails 2应用程序更新为rails 3,发现“render:text”的使用行为不再相同 @结果是一个数组。在我的控制器中: render :text => "<ul>#{@results}</ul>" render:text=>“{@results}” 它以字符串形式返回整个数组,而不是遍历每个值: <ul> [" <li>Steve</li> ", " <li>John</

我正在将我的rails 2应用程序更新为rails 3,发现“render:text”的使用行为不再相同

@结果是一个数组。在我的控制器中:

render :text => "<ul>#{@results}</ul>"
render:text=>“
    {@results}
它以字符串形式返回整个数组,而不是遍历每个值:

<ul>
  ["
  <li>Steve</li>
  ", "
  <li>John</li>
  "]
</ul>
    ["
  • 史蒂夫
  • ", "
  • 约翰
  • "]
在Rails 2.x中运行良好,但在Rails 3中没有。我该如何解决这个问题

我期待的结果是:

<ul>
  <li>Steve</li>
  <li>John</li>
</ul>
  • 史蒂夫
  • 约翰

我建议执行以下操作,而不是渲染:文本

render :partial => "result", :collection => @results
并添加文件:_result.html.erb

<ul>
  <%= result %>
</ul>
或者,如果您可以从@results中删除li标记,那就更好了

<ul>
  <li><%= result %></li>
</ul>

Rails 3文档说呈现文本应该用于非HTML文本,这不适合您的用例。使用render:partial:collection是一种更好、更全面的rails 3方法来遍历列表。

字符串包含HTML标记,因此您需要将其标记为安全的,以便rails不会转义标记

render :text => "<ul>#{@results}</ul>".html_safe
render:text=>“
    {@results}
”.html\u安全
注意:除非有正当理由在控制器中使用HTML,否则我建议将列表项移动到视图中

2014年6月23日更新:回顾过去,我不喜欢控制器中有这种字符串解析逻辑。
@results
表明某个对象中嵌入了HTML。我建议使用presentation对象并调用类似
@results.list的方法。德雷珀宝石非常适合这种情况

引用


我知道这个问题只针对Rails 3.1.4

但是那些来到这里并使用更新版本的人,从Rails 5.1开始,我们将这样做:

render plain: "I'm like everyone else."

美好的注意,这将
内容类型
标题设置为
文本/普通
(在字符集中)。如果您来这里是想了解如何呈现HTML(但不是在模板文件中),请使用
呈现HTML:“…”
。这将标题设置为
text/html
,浏览器将知道如何解析html。(可能对html字符串调用
.html\u safe
,但要小心。)