0

我有一个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文件。

PS有没有办法让视图在找不到时:mobile回退默认视图?:html那会成功的。

4

2 回答 2

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 实现更加粗俗和骇人听闻。

于 2013-03-09T18:40:01.617 回答
0

通常,您应该使用特定于内容类型的视图进行响应。在这种情况下,解决这个短期问题的一个简单方法是重命名index.jsindex.mobile.js.

Rails 尝试呈现特定于所请求内容类型的视图——例如,index.html.haml当请求 html 或show.json.haml请求 json 时。在这种情况下,请求的内容类型是:mobile

从长远来看,您应该开发将在请求不同内容类型时发回的视图。

于 2012-05-10T01:20:19.717 回答