Voulant jouer avec jQuery, Orbited, et FasterCSV, j'ai fait une application de chat Rails.Rails routage est foutu avec IE
Vous pouvez accéder à une URL et une fenêtre de discussion similaire à IRC s'affiche. Vous pouvez également exporter le contenu de la fenêtre de discussion en visitant la même URL mais en ajoutant une extension ".csv" à l'URL.
version HTML: http://host.name/channel/sweetchatroom
version CSV: http://host.name/channel/sweetchatroom.csv
Dans Firefox, Safari, Chrome et il fonctionne normalement. Dans IE, si je consulte l'URL "HTML", j'obtiens la version CSV de la page. Je dois ajouter manuellement ".html" à l'URL comme ceci:
http://host.name/channel/sweetchatroom.html
Mon parcours ressemble actuellement à ceci:
map.chat '/channel/:name.:format', :controller => 'channels', :action => 'show'
Je googlé un peu et essayé les suggestions suivantes:
map.slug '/channel/:slug.:format', :controller => 'channels', :action => 'show', :defaults => {:format => 'html'}
- et -
map.slug '/channel/:slug.:format', :controller => 'channels', :action => 'show', :format => 'html'
Aucun d'eux n'a travaillé. Apparemment, si vous visitez une URL sans spécifier le format, Rails ne définit pas params[:format]
à quoi que ce soit. Lequel en principe je préfère, mais les docs sont assez clairs que vous pouvez définir un format par défaut et je ne sais pas pourquoi il ne respecte pas cela. La suggestion ": defaults => ..." est ce qui est dans les docs de Rails.
Pour obtenir de travailler que je devais changer cette partie de mon contrôleur canaux:
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
à ceci:
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
Il fonctionne parfaitement, mais semble vraiment hackish. Il doit y avoir une meilleure façon, plus "Ruby". Est-ce que j'ai la syntaxe erronée sur l'entrée de mes routes? Il semble que les routes sont là où cela devrait être.
Je sais qu'il me manque quelque chose. Je n'ai pas trouvé de bonnes informations sur ce problème sur Google ou sur StackOverflow. Cela signifie généralement que je suis loin dans les mauvaises herbes.
C'était l'une des choses que j'avais considérées et pour une raison quelconque, je ne l'avais pas essayé. – hernan43
+1 pour l'utilisation de "wonky" dans votre titre. Ceci est le problème d'en-tête de rails 2.0 IE Accepts. Google pour "rails ie accepte". –