我有一个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已基于{ MissingTemplate异常中提到的{1}}数组。我可以找到一些关于如何在调用render时设置:formats
数组的文档,但我想自动执行此操作,而不必修改每个现有的响应。
如何在应用程序级别将:formats
修改为:formats=>[:mobile]
?
答案 0 :(得分:0)
我终于找到了answer似乎对我有用(Will Madden的回答)。
具体来说,我使用他的建议来覆盖我的ApplicationController中的formats=
。他说的与rails已经为:js格式添加完全相同的功能的方式相同。
他在答案中写的具体方法如下:
class ApplicationController
...
def formats=(values)
values << :html if values == [:mobile]
super(values)
end
...
end
这是迄今为止我找到的最优雅的解决方案。但是,只要有问题的页面的控制器包含当前操作的respond_to块,它就会失败。