2

最近我在 IE 和其他浏览器中遇到了一个问题,我前段时间在 railscasts.com 上也注意到了这个问题。

例如,加载页面:

  • railscasts.com/episodes/some_id#comments

将在激活评论选项卡的情况下加载 railscasts 剧集。导航到“类似”选项卡会将 url 更改为:

  • railscasts.com/episodes/some_id#similar

如果我点击后退或(IE)重新加载按钮,我会看到评论的 json 表示。

挖掘日志文件我发现了这个:

铬合金:

  • EpisodesController#显示为 HTML
  • EpisodesController#显示为 HTML

IE

  • EpisodesController#显示为 HTML
  • EpisodesController#show as */*

在一个相关的stackoverflow问题中,建议更改订单respond_to块并使第一个响应块'html'

 respond_to do |format|
  format.html
  format.json
end

意思是,如果没有给出响应格式,则需要第一个响应格式。不是该问题的 DRY 解决方案。如果您正在使用,也不可能respond_with(@episodes)

另一种解决方案是在 routes.rb 中设置默认响应格式:

match 'episodes/:id' => 'episodes#show', :defaults => { :format => 'html' }

这也不是 DRY,因为您不想为您定义的每条路线都写下它。

最后我找到了在应用程序控制器中使用 before_filter 的建议:

before_filter :set_default_response_format
protected
def set_default_response_format
  request.format  = "html" if request.format == "*/*" && request.content_type.nil?
end

这似乎是该问题的稳定解决方案。

似乎没有更多的程序员遇到这个问题,或者我正在做某事,这似乎很奇怪。一开始就错了?

4

0 回答 0