2010-01-30 6 views
8

J'ai rencontré un problème en utilisant link_to. Pourquoi mon lien pour utiliser la méthode GET et mon bouton_pour utiliser la méthode POST, après avoir spécifié ma "méthode" => "post" dans les paramètres link_to?Button_to utilise POST Link_to utilise GET, pourquoi? ROR

Vue:

<%= button_to "pdf", :action => 'getquote' %> 
<%= link_to 'pdf', {:controller => 'inventories', :action => 'getquote', :method => :post } %> 

Controller Méthode:

def getquote 
@cart = find_cart 
respond_to do |format| 
format.pdf 
end 
end 

Borne de sortie (Bouton/Link, respectivement):

Processing InventoriesController#getquote (for 127.0.0.1 at 2010-01-30 01:38:02) [POST] 
    Parameters: {"action"=>"getquote", "authenticity_token"=>"D2cwnHyTHgomdUM3wXBBXlOe4NQLmv1Srn0paLbExpQ=", "controller"=>"inventories"} 

Processing InventoriesController#show (for 127.0.0.1 at 2010-01-30 01:39:07) [GET] 
    Parameters: {"method"=>"post", "action"=>"show", "id"=>"getquote", "controller"=>"inventories"} 

Répondre

11

Je pense que vos options html doivent être dans un hachage séparé de vos options url:

<%= link_to 'pdf', {:controller => 'inventories', :action => 'getquote'}, {:method => :post } %> 

Je regardai partout un bon exemple, avec pas de chance. Pour mon code, je suis la plupart du temps donné et il suffit d'utiliser le nouveau style:

<%= link_to 'Delete', custom_event, :confirm => 'Are you sure?', :method => :delete %> 
+0

J'ai le même problème avec ROR 3.0.17 (ou 18, ou 19, ne me souviens pas). J'ai fait le balisage juste comme ce "nouveau style" il travaille sur la plupart des pages sauf une page spécifique. L'appel est exactement la même chose, je ne sais pas ce qui ne va pas. Firebug montre aussi que le lien a 2 paramètres de données: data-confirm et data-method. Est-ce censé être juste? –

1

Une possibilité est que vous avez désactivé JavaScript, en Dans ce cas, il va revenir à un GET.

+1

Javascript est activé. –

6

peut être utile pour quelqu'un qui est en visite :)

Par défaut, button_to effectue une action POST seulement.

à faire faire une requête GET la syntaxe est la suivante:

<%= button_to 'pdf', { :action => 'getquote'}, :method => :get %> 
+1

Fonctionne, mais seulement si vous passez ': get' comme symbole ou' 'get '' en minuscule. La chaîne '" GET "' ne fonctionne pas. Juste un peu de gotcha. – Gunchars

+3

Lorsque je fais cela, j'ajoute un point d'interrogation "?" à la fin de mon URL. Quelqu'un d'autre voit cela ou a une solution? –

+1

@TrevorMcKendrick peut être utile http://stackoverflow.com/a/8122116/1297435 –

Questions connexes