web-dev-qa-db-fra.com

Existe-t-il un moyen de passer des paramètres lorsque vous cliquez sur le bouton Soumettre dans la vue simple_form dans Rails 3.2.12?

En mode simple_form, le bouton d'envoi est le suivant:

<%= f.button :submit, 'Save' %>

Nous essayons de passer un paramètre subaction en cliquant sur le bouton Save. Le params[:subaction] devrait avoir la valeur "mise à jour" après avoir cliqué sur le bouton. Voici ce que nous avons essayé en vue mais cela n'a pas fonctionné:

<%= f.button :submit, 'Save', :subaction => 'update' %>

Existe-t-il un moyen de passer une valeur dans params[:subaction] lorsque vous cliquez sur le bouton Save?

19
user938363

Utilisez l'option nom et valeur.

   <%= f.button  :submit , name: "subaction",value: "update"%>

Dans votre contrôleur, vous obtiendrez des paramètres [: subaction] avec la valeur "update"

34
Thaha kp

comme le fait remarquer dax,

<%= hidden_field_tag(:subaction, 'update') %>
<%= f.button :submit, 'Save' %>

Cela fournira la valeur de chaîne "mise à jour" à l'action du contrôleur routé via le champ caché. Il peut ensuite être récupéré par le contrôleur avec

params[:subaction]
19
emery

En spécifiant f.button :button, type: 'submit', nous pouvons utiliser les attributs name et value comme suit pour soumettre en utilisant un seul paramètre. Notamment, la valeur soumise (par exemple, "gâteau") peut être différente du texte du bouton (par exemple, "Le meilleur gâteau").

_ form.html.erb

<%= f.button :button, 'The Best Cake', type: 'submit', name: 'dessert_choice', value: 'cake' %>
<%= f.button :button, 'The Best Pie', type: 'submit', name: 'dessert_choice', value: 'pie' %>

Contrôleur

def controller_action
  dessert_choice = params[:dessert_choice] # 'cake' or 'pie'
end

Cette approche évite le besoin d'entrées cachées comme @dax mentionné dans le commentaire ci-dessus.

Testé sur Simple Form 3.3.1 avec Rails 4.2.

10
chrislopresto