2012-03-30 75 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的方法。德雷珀寶石非常適合這個。

引用