2017-08-23 6 views
1

J'essaie de créer un formulaire simple qui passe quelques paramètres à un contrôleur.Le formulaire avec l'URL personnalisée continue de soumettre à la méthode Create

Voici ce que j'ai:

<%= form_tag({url: order_pizza_path}, method: :post) do %> 
    <%= hidden_field_tag :id, value: 0, name:"tag-1" %> 
    <!-- hidden field is then filled in with js --> 
    <%= submit_tag "Submit" %> 
<% end %> 

<!-- routes: --> 
get 'pizza/new' => 'pizza#new', as: 'new_pizza' 
post 'pizza' => 'pizza#create', as: 'create_pizza' 
post 'order_pizza' => 'pizza#order', as: 'order_pizza' 

Mais quand je soumets, il continue d'essayer de pointer vers la méthode Create dans mon contrôleur de Pizza. Je continue à obtenir l'erreur suivante:

ActionController::ParameterMissing in PizzaController#create 
param is missing or the value is empty: pizza 

URL La forme est /pizza. Ceci est l'URL de l'erreur: /pizza?method=get&url=%2Forder_pizza


Cela se produit même si je change à une requête GET POST pas. Pourquoi mon navigateur continue-t-il d'essayer la méthode Create?

Répondre

1

La syntaxe correcte est

form_tag(order_pizza_path, method: :post) 

pas

form_tag({url: order_pizza_path}, method: :post) 

{url: order_pizza_path} n'est pas un url_for_options valide de sorte que le form_tag soumettra à la valeur par défaut, qui est l'action create.

une valeur valide pour url_for_options serait

{action: 'order'} 
+0

Bizarre, j'aurais juré utilisé ma syntaxe avec succès avant. Merci! Savez-vous pourquoi le navigateur est en train de créer par défaut plutôt que de lancer une erreur? –

+0

Vérifiez ma réponse mise à jour. –