最近我在 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
这似乎是该问题的稳定解决方案。
似乎没有更多的程序员遇到这个问题,或者我正在做某事,这似乎很奇怪。一开始就错了?