【问题标题】:Missing template error in Rails 4 when requesting format */*;在请求格式 */* 时,Rails 4 中缺少模板错误;
【发布时间】:2015-07-12 00:31:18
【问题描述】:

我已经看到这些错误很长时间了,但没有发现问题:

ActionView::MissingTemplate: Missing template pages/home, application/home with {:locale=>[:en], :formats=>["*/*;"]}

用户代理始终是 MSIE6(这是我之前放弃的部分原因)。

复制:curl -H "Accept: */*;" -I http://localhost:5000

有人知道怎么解决吗?

编辑

curl -H "Accept: */*" -I http://localhost:5000 有效。仅当格式设置为*/*;(注意分号)时才有效。

更新

我尝试按照 cmets 中的建议修改 Mime:ALL,但无法让它同时接受 */**/*;。我看到的一个解决方案是猴子修补在不存在或格式错误的 mime 类型时如何处理请求,但我不确定如何处理。 This answer 提供了一个线索,但我仍然没有。

更多更新

我仍然看到这些错误以及更多错误。一个新的是:formats=>["hc/url;*/*"] (Firefox)。我很惊讶这并没有影响到其他任何人,我认为我的代码中没有任何特定的内容会导致不常见的错误。

【问题讨论】:

  • routes.rb中设置root为root "pages#home"
  • Rails maps "*/*" => :all ,我不确定如何,但您可能会强制将 :all 视为 :html 请求
  • 我所有的路线都正确设置了 Rajarshi。其实这个问题很微妙。 */* 有效,*/*; 无效。
  • 嗯,我想你可以通过注册一个 mime 类型 Mime::Type.register "*/*;", :all 来解决这个问题。或者可能是 Mime::ALL = Mime::Type.new("/", :all, ['/;'])。我认为您需要在初始化程序中执行此操作。 github.com/rails/rails/blob/…
  • 成功了!重新定义 Mime::ALL 会引发警告,因此寄存器可能是最好的。你应该把它放在一个答案中,我会接受它!

标签: ruby-on-rails internet-explorer format actionview


【解决方案1】:

gregkare 刚刚在 github 上发布了修复。

DEFAULT_RESPONSE_FORMAT = :html  
before_filter :set_default_response_format

def set_default_response_format
  request.format = DEFAULT_RESPONSE_FORMAT if request.format.to_sym.nil?
end

不太确定副作用,但目前看来效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 2015-09-08
    • 2016-04-26
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多