2010-08-10 3 views
4

Je construis une application sur Rails 3 RC. Je comprends le point derrière le param _snowman (http://railssnowman.info/)...however, j'ai un formulaire de recherche qui fait une requête GET à l'index Par conséquent, en soumettant le formulaire est la création de la chaîne de requête suivante:.?Pouvez-vous supprimer le _snowman dans Rails 3?

_snowman = ☃ & recherche = Box

Je ne sais pas que le support de codage UTF est aussi important qu'une chaîne de requête propre pour cette forme particulière (peut-être que je suis trop perfectionniste ... hehe) Y at-il un moyen de supprimer le _snowman param Je préfère ne pas convertir le formulaire à une demande POST pour cacher le bonhomme de neige, mais je préfère aussi ne pas être dans ma chaîne de requête.Toutes les pensées?

Répondre

1

Vous pouvez éviter le bonhomme de neige (maintenant une coche) dans Rails 3 en ... n'utilisant pas Rails pour le formulaire de recherche. Au lieu d'utiliser form_tag, écrivez les vôtres comme indiqué dans: Rails 3 UTF-8 query string showing up in URL?

Les rails d'aide sont parfaits à moins qu'ils ne vous aident. Do-it-yourself est bon aussi longtemps que vous comprenez les conséquences, et sont prêts à le maintenir dans le futur.

0

Je crois que le bonhomme de neige doit être envoyé par le câble pour s'assurer que vos données sont codées correctement, ce qui signifie que vous ne pouvez pas vraiment supprimer l'entrée de bonhomme de neige des formulaires. Depuis, il est envoyé dans votre requête GET, il devra être ajouté à l'URL.

Je suppose que vous pouvez écrire du javascript pour nettoyer l'URL une fois la page de recherche chargée, ou vous pouvez configurer une redirection vers l'URL équivalente moins le bonhomme de neige. Les deux options ne me conviennent pas vraiment.

De plus, il ne semble pas possible de configurer Rails pour qu'il ne soit pas édité. Si vous vouliez vraiment vous en débarrasser, vous pourriez commenter ces lignes dans la source de Rails (les correctifs commis au bas de railssnowman.info devraient vous conduire aux fichiers et aux numéros de ligne). Cela ajoute des tâches de maintenance pour vous lorsque vous mettez à niveau Rails. Peut-être que vous pouvez soumettre un patch pour pouvoir l'éteindre?

EDIT: On dirait qu'ils l'ont juste changé à ce qui ressemble à un checkmark instead of a snowman.

EDIT: Oups, back to a snowman.

+0

Oui, je suis d'accord. Je comprends pourquoi c'est là ... et je pense que c'est une bonne idée de résoudre le problème. Je voudrais juste l'option de renoncer à IE charset fix dans l'intérêt d'une requête propre. Merci pour votre contribution. – TheOddLinguist

+0

Ouais, ça m'énerve aussi. ? search = terme semble beaucoup plus propre que? _snowman = ☃ & search = terme –

0

Dans Rails 4.1, vous pouvez utiliser l'option :enforce_utf8 => false pour désactiver l'étiquette d'entrée utf8.

Cependant, je veux utiliser cela dans Rails 3, donc j'ai patché mon Rails. J'ai mis ce qui suit dans le répertoire config/initializers.

# allow removing utf8 using enforce_utf8, remove after Rails 4.1 
module ActionView 
    module Helpers 
    module FormTagHelper 
     def extra_tags_for_form(html_options) 
     authenticity_token = html_options.delete("authenticity_token") 
     method = html_options.delete("method").to_s 

     method_tag = case method 
      when /^get$/i # must be case-insensitive, but can't use downcase as might be nil 
      html_options["method"] = "get" 
      '' 
      when /^post$/i, "", nil 
      html_options["method"] = "post" 
      token_tag(authenticity_token) 
      else 
      html_options["method"] = "post" 
      tag(:input, :type => "hidden", :name => "_method", :value => method) + token_tag(authenticity_token) 
     end 

     enforce_utf8 = html_options.delete("enforce_utf8") { true } 
     tags = (enforce_utf8 ? utf8_enforcer_tag : ''.html_safe) << method_tag 
     content_tag(:div, tags, :style => 'margin:0;padding:0;display:inline') 
     end 
    end 
    end 
end