如何在具有不同别名MIME的视图中使用partial?

时间:2010-07-02 10:21:28

标签: ruby-on-rails web-applications partial-views

我为2个不同用户的角色使用2组不同的视图。 我正在使用register_alias:

Mime::Type.register_alias "text/html", :basic

在控制器中:

class SomeController < ApplicationController
  def index
    # …
    respond_to do |format|
      format.html  # index.html.erb (advance)
      format.basic # index.basic.erb
    end
  end
end

在某些情况下,我必须在两个视图中使用相同代码,然后我会使用Partial ,但由于MIME别名,我必须使用2相同的部分: my_partial.html.erb和my_partial.basic.erb

我认为有一个解决方案来干掉代码并只使用部分代码。

你有解决方案吗?

谢谢你, 亚历山德罗

1 个答案:

答案 0 :(得分:4)

旧答案:

我可能尝试了50种不同的东西,直到我找到了正确的写一次部分的方法,但这是值得的,因为它非常简单:

在索引视图中,您通常会这样做:

<%= render "my_partial" %>

这隐式地映射到对应于您请求的Mime的部分,因此它意味着有两个部分实现。如果您想要DRY partial,只需明确指定格式

<%= render "my_partial.html" %>

作为这一观察的额外好处,如果您的responds_to代码块实际上只是基于格式进行切换并且内部没有逻辑,那么您可以完全删除该代码块,并且内容仍然隐式工作

Rails 3.2更新:

Rails已弃用对上述内容的支持,并且已在最新版本的Rails中完全删除了支持。以下是Rails 3.2的正确方法:

<%= render :partial => "my_partial", :formats => [:html] %>