我有一个index.js
,可以从桌面启动,但是当我尝试从Mobile Safari打开时出现以下错误。
ActionView::MissingTemplate: Missing template ads/thumbs/index, application/index with {:locale=>[:es, :en], :formats=>[:mobile], :handlers=>[:erb, :builder, :haml]}. Searched in: * "/app/app/views" * "/app/vendor/bundle/ruby/1.9.1/gems/devise-1.5.2/app/views" * "/app/app/views"
我不确定当文件夹中没有这样的文件时,为什么要查找:formats=>[:mobile]
。
尝试使用手机设备登录后发生同样的事情。我尝试渲染一个不存在的create.mobile.haml
文件。
P.S。 Is there a way to make :mobile
views to fallback default :html
views when not found?那就可以了。
答案 0 :(得分:0)
您通常应该回复内容类型特定的视图。在这种情况下,解决此短期问题的一种简单方法是将index.js
重命名为index.mobile.js
。
Rails尝试呈现特定于所请求内容类型的视图 - 例如,请求html时为index.html.haml
,或者如果请求json则为show.json.haml
。在这种情况下,请求的内容类型为:mobile
。
从长远来看,您应该开发在请求不同内容类型时将发回的视图。
答案 1 :(得分:0)
这是一个简单的解决方案。
class ApplicationController
...
def formats=(values)
values << :html if values == [:mobile]
super(values)
end
...
end
事实证明,Rails(3.2.11)已经为:js格式的请求添加了:html回退。这是ActionView::LookupContext#formats=
# Override formats= to expand ["*/*"] values and automatically
# add :html as fallback to :js.
def formats=(values)
if values
values.concat(default_formats) if values.delete "*/*"
values << :html if values == [:js]
end
super(values)
end
因此,您可以自己覆盖#formats=
,并且可以想象它不会比现有的Rails实现更糟糕。