123 votes

form_for mais pour poster vers une action différente

Je veux avoir un form_for @user mais l'envoyer à une action personnalisée dans le contrôleur des utilisateurs.

Comment puis-je le faire ?

179voto

Austin Points 1813
form_for @user, :url => url_for(:controller => 'mycontroller', :action => 'myaction')

o

form_for @user, :url => whatever_path

15 votes

Je ne pense pas que url_for est nécessaire. De plus, comme le contrôleur est le même, vous pourriez utiliser form_for @user, :url => :action => 'myaction'

1 votes

La réponse ci-dessus a été utile mais j'ai dû la modifier un peu car sinon le POST routait toujours vers l'action editer autrement : <%= form_for(@user, url : {action : "myaction"}, method : :post) do |user_form| %>. Veuillez noter que ceci est pour un fichier de vue dans le dossier views/users/.

42voto

Peter Lee Points 2674

Ce qui suit fonctionne pour moi :

form_for @user, :url => {:action => "YourActionName"}

1 votes

Cela fonctionne. Vérifiez dans les documents officiels en recherchant action: ( côlon actif ) api.rubyonrails.org/classes/ActionView/Helpers/

3 votes

Hmm, je ne suis pas sûr. J'ai mis form_for @user, url: {action: 'myaction'} mais ça me donne No route matches {:action=>"myaction", :controller=>"users"} erreur.

0 votes

@lulalala, bien sûr, vous devez également définir des routes. dans ce cas, comme : resources :users do collection do get :myaction end end

11voto

Je l'ai fait comme ça

<%= form_for :user, url: {action: "update", params: {id: @user.id}} do |f| %>

Notez le paramètre facultatif id défini à l'attribut id de l'instance de l'utilisateur.

4voto

Si vous voulez passer un contrôleur personnalisé à un form_for pendant le rendu d'un formulaire partiel, vous pouvez utiliser ceci :

<%= render 'form', :locals => {:controller => 'my_controller', :action => 'my_action'}%>

et ensuite dans le formulaire partiel utiliser cette variable locale comme ceci :

<%= form_for(:post, :url => url_for(:controller => locals[:controller], :action => locals[:action]), html: {class: ""} ) do |f| -%>

4voto

juliangonzalez Points 2147

Il est également possible de les joindre en utilisant form_tag avec la syntaxe :

form_tag({controller: "people", action: "search"}, method: "get", class: "nifty_form")
# => '<form accept-charset="UTF-8" action="/people/search" method="get" class="nifty_form">'

Comme décrit dans http://guides.rubyonrails.org/form_helpers.html#multiple-hashes-in-form-helper-calls

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X