2009-09-16 23 views
171

¿Cómo pasamos parámetros en redirect_to en rails? Sé que podemos pasar Identificación del uso de este:Pasar parámetros en rails redirect_to

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

Si quiero pasar parámetros adicionales al igual que algunos datos de la forma cómo lograrlo?

EDIT:

Para conocer la sintaxis Ruby 2 tiene que actualizar el fragmento anterior a:

redirect_to action: action_name, id: 3 
+3

¿Qué está realmente tratando de lograr? ¿Has considerado guardar los datos en la sesión? –

+1

Lo que está solicitando no es posible: si está haciendo una redirección, debe ser una solicitud GET a la que está redireccionando, por lo que los parámetros siempre estarán visibles para sus usuarios. Deberías guardar cosas en la sesión en su lugar. – GregT

Respuesta

146

Sólo hay que añadir a las opciones:

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

cedería /thing/3/edit?something=else

+5

pero no quiero que sea visible para el usuario .... – markiv

+14

No se puede redirigir con un POST. De los documentos HTTP 1.1 bajo las definiciones 3xx: "La acción requerida PUEDE ser realizada por el agente de usuario sin interacción con el usuario si y solo si el método utilizado en la segunda solicitud es GET o HEAD". Amplíe lo que realmente está tratando de lograr y probablemente podamos empujarlo en la dirección correcta. – jdl

+0

Hola Muchas gracias por su respuesta. Soy un novato en el desarrollo web. Estoy tratando de conocer diferentes formas de invocar una acción. Su respuesta ha aclarado muchas de mis dudas. Gracias de nuevo :)) – markiv

68

Si está utilizando recursos RESTful puede hacer lo siguiente:

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') 
38

Puede pasar objetos arbitrarios a la plantilla con el parámetro flash.

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

Y luego acceda a ellos en la plantilla a través del hash.

<% flash[:new_solution_errors].each do |err| %> 
+54

Esta es una práctica deficiente. Este método hace mal uso del objeto flash, está destinado a los mensajes del usuario. Mejor sería almacenar parámetros arbitrarios en la sesión y luego borrar esos parámetros de la sesión cuando haya terminado. – GregT

6
redirect_to :controller => "controller_name", :action => "action_name", :id => x.id 
+6

¿Podrían darnos más explicaciones? Solo un ejemplo de código realmente no es suficiente. – simonmenke

38

Si usted tiene algunos datos del formulario por ejemplo enviado a casa # acción, ahora quiere volver a dirigir a la casa # actúan manteniendo los parámetros, puede hacerlo

redirect_to act_house_path(request.parameters)

+1

¿Sabes cómo combinarías esto, además de nuevos parámetros? es decir, request.parameters, (o +): this =>: that –

+4

Puede usar el método merge. Por ejemplo: 'redirect_to act_house_path (request.parameters.merge (key:" value "))' – GregT

+1

También podría usar el método except para excluir params no deseados después de la fusión: 'redirect_to act_house_path (request.parameters.except (: authenticity_token,: controlador,: acción,: utf8,: commit) ' –

22
redirect_to new_user_path(:id => 1, :contact_id => 3, :name => 'suleman') 
3

routes.rb

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

Cualquier controlador que desea redirigir con los parámetros son los siguientes:

redirect_to abc_path(@abc, id: @id), :notice => "message fine" 
Cuestiones relacionadas