【问题标题】:rails change path of partial collection renderingrails改变部分集合渲染的路径
【发布时间】: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/ 中查找部分

【问题讨论】:

    标签: ruby ruby-on-rails-3 partial-views sti


    【解决方案1】:

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

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

    【讨论】:

    • 是的,但由于 STI,我不能这样做。这样做会破坏渲染,因为现在当它渲染图像对象时,它会尝试在消息部分中执行它
    • 啊。我知道了。我想您可以使用对话类派生部分路径(请参阅编辑)。感觉确实有更好的方法。
    • 这仍然无法按预期工作。对话是一个数组。此外,您需要使用您的语法:
    猜你喜欢
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多