我正在将rails 2应用更新到rails 3,并发现使用'render:text'的行为不再相同了.
@results是一个数组.在我的控制器中:
render :text => "<ul>#{@results}</ul>"
Run Code Online (Sandbox Code Playgroud)
它将整个数组作为字符串返回,而不是遍历每个值:
<ul>
["
<li>Steve</li>
", "
<li>John</li>
"]
</ul>
Run Code Online (Sandbox Code Playgroud)
在Rails 2.x中工作得很好但在3中没有.我如何解决这个问题?
我期待的结果是:
<ul>
<li>Steve</li>
<li>John</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
Fel*_*ger 13
我知道这个问题仅适用于Rails 3.1.4.
但是那些来到这里且处于更新版本的人,从Rails 5.1开始,我们将这样做:
render plain: "I'm like everyone else."
Run Code Online (Sandbox Code Playgroud)
sca*_*er2 10
该字符串包含HTML标记,因此您需要将其标记为安全,以便Rails不会转义标记.
render :text => "<ul>#{@results}</ul>".html_safe
Run Code Online (Sandbox Code Playgroud)
注意:除非有正当理由在控制器中包含HTML,否则我建议将列表项移动到视图中.
6/23/2014更新:回想起来,我不喜欢在控制器中使用这个字符串解析逻辑.该@results
建议有嵌入对象的地方HTML.我建议使用表示对象并调用类似的方法@results.list
.Draper宝石非常适合这种情况.
引用
我建议执行以下操作而不是渲染:文本
render :partial => "result", :collection => @results
Run Code Online (Sandbox Code Playgroud)
并添加文件:_result.html.erb
<ul>
<%= result %>
</ul>
Run Code Online (Sandbox Code Playgroud)
如果您可以从 @results 中删除 li 标签,那就更好了
<ul>
<li><%= result %></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
Rails 3 文档说渲染文本应该用于非 HTML 文本,这不适合您的用例。使用 render :partial :collection 是一种更好、更符合 Rails 3 的方式来迭代列表。
归档时间: |
|
查看次数: |
23941 次 |
最近记录: |