【问题标题】:How to use partial in views with different alias MIME?如何在具有不同别名 MIME 的视图中使用部分?
【发布时间】:2010-07-02 10:21:27
【问题描述】:

我为 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

我认为有一个解决方案可以干燥代码并仅使用部分代码。

你有什么解决办法吗?

谢谢你, 亚历山德罗

【问题讨论】:

  • 为什么您对不同的角色使用不同的 MIME 类型?这对我来说听起来有点奇怪,除非其中一个角色是让用户使用移动设备访问该网站。
  • 其实它们是 MIME 别名。我在这里得到了这个解决方案(我的问题):stackoverflow.com/questions/3157063/…

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


【解决方案1】:

旧答案:

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

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

<%= render "my_partial" %>

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

<%= render "my_partial.html" %>

作为这一观察的额外好处,如果您的 responds_to 代码块真的只是基于格式切换并且其中没有逻辑,您可以完全删除该代码块并且事情仍然隐式工作。

Rails 3.2 更新:

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

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

【讨论】:

    猜你喜欢
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多