我为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
我认为有一个解决方案来干掉代码并只使用部分代码。
你有解决方案吗?
谢谢你, 亚历山德罗答案 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] %>