web-dev-qa-db-fra.com

Passage de paramètres dans Rails redirect_to

Comment passe-t-on les paramètres dans redirect_to in rails? Je sais qu'on peut passer id avec ceci:

redirect_to :action => action_name,:id => 3

Si je souhaite transmettre des paramètres supplémentaires, tels que des données de formulaire, comment y parvenir?

MODIFIER:

Pour la syntaxe Ruby 2, vous devez mettre à jour le fragment ci-dessus pour:

redirect_to action: action_name, id: 3
181
markiv

Il suffit de les ajouter aux options:

redirect_to controller: 'thing', action: 'edit', id: 3, something: 'else'

Rendrait /thing/3/edit?something=else

158
Michael Sepcot

Si vous utilisez des ressources RESTful, vous pouvez effectuer les opérations suivantes:

redirect_to action_name_resource_path(resource_object, param_1: 'value_1', param_2: 'value_2')

or
#You can also use the object_id instead of the object
redirect_to action_name_resource_path(resource_object_id, param_1: 'value_1', param_2: 'value_2')

or
#if its a collection action like index, you can omit the id as follows
redirect_to action_name_resource_path(param_1: 'value_1', param_2: 'value_2')

#An example with nested resource is as follows:
redirect_to edit_user_project_path(@user, @project, param_1: 'value_1', param_2: 'value_2')
75
Sohan

Si vous avez des données de formulaire envoyées par exemple à home # action, vous souhaitez maintenant les rediriger vers house # act tout en conservant les paramètres, vous pouvez le faire.

redirect_to act_house_path(request.parameters)

45
v4r

Vous pouvez transmettre des objets arbitraires au modèle avec le paramètre flash.

 redirect_to :back, flash: {new_solution_errors: solution.errors}

Et puis y accéder dans le modèle via le hachage.

<% flash[:new_solution_errors].each do |err| %>
38
vermasque
redirect_to new_user_path(:id => 1, :contact_id => 3, :name => 'suleman')
26
Muhammad Suleman
redirect_to :controller => "controller_name", :action => "action_name", :id => x.id
6
Karwin

routes.rb

 match 'controller_name/action_name' => 'controller_name#action_name', via: [:get, :post], :as => :abc

Tous les contrôleurs que vous souhaitez rediriger avec des paramètres sont indiqués ci-dessous: 

redirect_to abc_path(@abc, id: @id), :notice => "message fine" 
3
Mitesh Sharma

Si vous cherchez un moyen de transmettre des paramètres d'URL supplémentaires (pas de contrôleur, d'action, d'id, etc.), voici une méthode robuste pour le faire:

object_path(@object, params: request.query_parameters)

Cela transmettra les paramètres utm ou tout autre paramètre supplémentaire que vous ne voulez pas perdre.

0
Abram

Parcourez votre chemin et prenez la params et revenez:

redirect_to controller: "client", action: "get_name", params: request.query_parameters and return
0
Darlan Dieterich