2010-03-01 2 views

Répondre

25

Un link_to va toujours mettre les arguments dans la chaîne de requête car il crée un lien HTML get style - même si vous mettez :method => :post que juste un argument ajoute supplémentaire (« spécial ») _method. Ce que je pense que vous voulez vraiment est un lien button_to - ce qui en fera une sorte de formulaire-post. Il fonctionne à la place, mais il indique button_to (par exemple, button_to 'My link', path(:params => :go_here)) L'inconvénient est qu'il ressemblera à un bouton, mais vous pouvez lui donner une classe CSS (par exemple "unbutton"), puis changer le style sur cette classe CSS Sinon, si ce que vous voulez réellement, c'est que params ne soit pas du tout transmis au contrôleur ... alors ne les incluez pas lors de la création de votre lien (par exemple, link_to "My link" path - il n'y a pas besoin de :post si vous ne voulez pas publier de contenu params)

Enfin, si ce que vous voulez pour le params de devenir une partie de l'URL (par exemple,., etc.), vous devez ensuite mettre à jour vos itinéraires pour inclure ces paramètres en tant qu'options. Jetez un oeil à la section de routage de la rdoc pour savoir comment faire.

+1

Cette solution m'a pris des heures de googling! Je suis nouveau à Rails. button_to a résolu mon problème. Merci beaucoup! – Will

+1

Mise à jour sur ce point: 4.1 expédie button_to avec un paramètre params (avec le gotch qu'il n'autorise pas les paramètres imbriqués, * dough *), où les paramètres sont vraiment construits en utilisant des champs cachés. C'est probablement ce que vous voulez. – Felix

+0

Neato ... bien - mon conseil est toujours là pour les Rails passés, mais bon de voir qu'ils ont finalement trouvé une solution. –

-1

Vous pouvez utiliser le code ci-dessous, lequel rails.js nécessite une méthode de données pour passer en mode de publication dans Ajax.

<%= link_to '<button id="print" type="submit" class="btn">Print</button>'.html_safe, { controller: :lots, id: @lot.containername, action: "print_#{print_template}", remote: true }, {'data-method' => :post} %>

Questions connexes