2012-03-30 102 views
4

我正在更新我的rails 2应用程序到rails 3,并发现使用'render:text'的行为不再一​​样。Rails 3.1.4 - 渲染:文本

@results是一个数组。在我的控制器:

render :text => "<ul>#{@results}</ul>" 

它返回整个数组作为一个字符串,而不是通过每个迭代值:

<ul> 
    [" 
    <li>Steve</li> 
    ", " 
    <li>John</li> 
    "] 
</ul> 

在Rails的2.X工作得很好,但不是在3.如何解决这个问题?

我期待的结果:

<ul> 
    <li>Steve</li> 
    <li>John</li> 
</ul> 

回答

1

我建议做以下的,而不是渲染:文本

render :partial => "result", :collection => @results 

,并添加文件:_result.html.erb与

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

或甚至更好,如果您可以从@results删除li标签

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

Rails 3文档说渲染文本应该用于非HTML文本,这不适合您的用例。使用render:partial:collection是一种更好,更多的方式来遍历你的列表。

10

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

render :text => "<ul>#{@results}</ul>".html_safe 

注意:除非在您的控制器中有HTML的正当理由,否则我建议将列表项目移动到视图中。

6/23/2014更新:回想起来,我不喜欢在控制器中有这个字符串解析逻辑。 @results暗示有HTML嵌入在某个对象中。我建议使用演示文稿对象,并调用类似@results.list的方法。德雷珀宝石非常适合这个。

引用