1

我有一个 Rails 3.2 应用程序,最近我添加了 mobile-fu gem,以便添加单独的移动视图。
有一些小问题,但在大多数情况下,它工作得很好。

但是,我只为少数几个页面制作了移动视图。当我尝试从移动设备转到没有移动视图的页面时,我得到:

Missing template after_hour_it_supports/index, application/index with {:locale=>[:en], :formats=>[:mobile], :handlers=>[:erb, :builder, :prawn, :prawn_dsl]}

这是我所期望的。

但是,有必要显示一些可能永远不会有移动对应的页面。具体来说,有一个页面可以批准某事。他们正在批准的东西可能永远不会有移动视图,但批准页面已经有移动视图。我目前的方法是使用 iframe 来显示可能的非移动视图。当然,如果存在移动视图,我更愿意在非移动视图(仍在 iframe 中)上使用它。

所以我想做的是尝试使用 :mobile 格式渲染模板,但如果移动格式不存在,则使用 :html 格式进行渲染,这看起来就像 rails 已经根据:formats提到的数组所做的事情缺少模板异常。我可以找到一些关于如何:formats在调用渲染时设置数组的文档,但我想自动执行此操作,而无需修改每个现有响应。

如何修改:formats=>[:mobile]:formats=>[:mobile, :html]应用程序级别?

4

1 回答 1

0

我终于找到了一个似乎对我有用的答案(Will Madden 的答案)

具体来说,我使用他的建议来覆盖formats=我的 ApplicationController。他说这与 rails 已经为 :js 格式添加了完全相同的功能的方式相同。

他在回答中写的具体方法是这样的:

class ApplicationController
    ...
    def formats=(values)
        values << :html if values == [:mobile]
        super(values)
    end
    ...
end

这是迄今为止我为我的情况找到的最优雅的解决方案。但是,只要相关页面的控制器包含当前操作的 respond_to 块,它就会失败。

于 2014-10-29T15:36:46.680 回答