【问题标题】:Rails routing is being wonky with IERails 路由在 IE 上很不稳定
【发布时间】:2009-11-30 14:46:06
【问题描述】:

想玩 jQuery、Orbited 和 FasterCSV,我制作了一个 Rails 聊天应用程序。

您可以浏览到一个 URL,并且有一个类似于 IRC 的聊天窗口。您还可以通过访问相同的 URL 但在 URL 中添加“.csv”扩展名来导出聊天窗口的内容。

HTML 版本:http://host.name/channel/sweetchatroom

CSV 版本:http://host.name/channel/sweetchatroom.csv

在 Firefox、Safari 和 Chrome 中它可以正常工作。在 IE 中,如果我访问“HTML”URL,我会得到页面的 CSV 版本。我必须像这样手动将“.html”添加到 URL:

http://host.name/channel/sweetchatroom.html

我的路线目前是这样的:

map.chat '/channel/:name.:format', :controller => 'channels', :action => 'show'

我用谷歌搜索了一下,并尝试了以下建议:

map.slug '/channel/:slug.:format', :controller => 'channels', :action => 'show', :defaults => {:format => 'html'}

-- 和--

map.slug '/channel/:slug.:format', :controller => 'channels', :action => 'show', :format => 'html'

他们都没有工作。显然,如果您访问 URL 时没有指定格式,Rails 不会将 params[:format] 设置为任何内容。原则上我更喜欢哪个,但是文档很清楚您可以设置默认格式,我不确定为什么它不尊重这一点。 ":defaults => ..." 建议是 Rails 文档中的内容。

为了让它工作,我不得不改变我的频道控制器的这一部分:

respond_to do |format|
  format.csv { 
    send_data channel_to_csv(@channel),
      :type => "text/plain",
      :filename => "#{@channel.slug}.csv",
      :disposition => 'inline'
  } 
  format.html # show.html.erb
  format.xml  { render :xml => @channel }
end

到这里:

respond_to do |format|
  format.csv { 
    send_data channel_to_csv(@channel),
      :type => "text/plain",
      :filename => "#{@channel.slug}.csv",
      :disposition => 'inline'
  } if params[:format] == 'csv' # <-- Here is the change
  format.html # show.html.erb
  format.xml  { render :xml => @channel }
end

它工作得很好,但看起来真的很hackish。必须有一种更好、更“Ruby”的方式。我的路线条目是否有语法错误?似乎路线应该在哪里。

我知道我必须遗漏一些东西。我在 Google 或 StackOverflow 上找不到关于这个问题的好信息。这通常意味着我已经摆脱了困境。

【问题讨论】:

    标签: ruby-on-rails internet-explorer routing


    【解决方案1】:

    我通常只是把 format.html 放在第一位。这样,当 IE 发送一个奇怪的接受标头(如*/*)时,它就不会被搞砸。基本上,如果 IE 说它接受所有内容(比如 URL 上没有扩展名时),Rails 将首先发送匹配的内容。

    【讨论】:

    • 这是我考虑过的事情之一,无论出于何种原因我都没有尝试过。
    • +1 用于在标题中使用“wonky”。这是 rails 2.0 IE Accepts 标头问题。谷歌“rails ie 接受”。
    猜你喜欢
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多