rails改变部分集合渲染的路径

Posted

技术标签:

【中文标题】rails改变部分集合渲染的路径【英文标题】:rails change path of partial collection rendering 【发布时间】:2013-03-24 06:47:31 【问题描述】:

我有 STI 关系,其中对话由消息和图像组成。

现在当我去渲染它们时,我使用:

<%= render conversation %>

效果很好。它找到给定对象的给定模板并渲染它。

现在对于我的移动网站,我想使用相同的东西,只是现在它应该找到说:

/mobile/message/_message.html.erb

而不是

/message/_message.html.erb

所以在我的控制器中我说:

if mobile?
  prepend_view_path "mobile"
end

确实被调用了,它“预先设置了我的视图路径”,当我这样做时我可以看到它正在工作:

raise view_paths.inspect

但是现在当我做我的时候

<%= render conversation %>

它仍在默认位置,即 /views/ 中查找部分

【问题讨论】:

【参考方案1】:

嗯,这应该可以,但它很不优雅:

<% conversation.each do |c| %>
  <% c_class = c.class.to_s.downcase.underscore %>
  <%= render :partial => "mobile/#c_class/#c_class", :object => c %>
<% end %>

【讨论】:

是的,但由于 STI,我不能这样做。这样做会破坏渲染,因为现在当它渲染图像对象时,它会尝试在消息部分中执行它 啊。我知道了。我想您可以使用对话类派生部分路径(请参阅编辑)。感觉确实有更好的方法。 这仍然无法按预期工作。对话是一个数组。此外,您需要使用您的语法:

以上是关于rails改变部分集合渲染的路径的主要内容,如果未能解决你的问题,请参考以下文章

Rails 设计多态 - 使用 Ajax 获取部分渲染

在我的视图集合中,我添加了一个搜索栏,它过滤了单元格,但是当我单击单元格时,它自己的路径没有改变

在包含数组的 Rails 中呈现异构对象列表

Rails 缓存分页集合

Rails 3:如何汇总多个集合选择?

创建动态集合选择 rails 3.1