Желая поиграть с jQuery, Orbited и FasterCSV, я создал приложение для чата Rails.
Вы можете перейти к URL-адресу, и там есть окно чата, похожее на IRC. Вы также можете экспортировать содержимое окна чата, посетив тот же URL-адрес, но добавив к нему расширение «.csv».
HTML версия: http://host.name/channel/sweetchatroom
CSV версия: http://host.name/channel/sweetchatroom.csv
В Firefox, Safari и Chrome он работает нормально. В IE, если я посещаю URL-адрес «HTML», я получаю 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
Это работает отлично, но кажется действительно хакерским. Должен быть лучший, более рубиновый способ. У меня неправильный синтаксис в моей записи маршрутов? Похоже, что маршруты, где это должно быть.
Я знаю, что я должен что-то упустить. Я не смог найти хорошую информацию по этой проблеме в Google или в StackOverflow. Это обычно означает, что я ухожу в сорняки.