2009-09-16 13 views
171

Come si passano i parametri in redirect_to in rails? So che possiamo passare id usando questo:Passaggio parametri in binari redirect_to

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

Se voglio passare parametri aggiuntivi come alcuni dati del modulo come raggiungerlo?

EDIT:

Per la sintassi Ruby 2 è necessario aggiornare il frammento di codice a:

redirect_to action: action_name, id: 3 
+3

Cosa stai effettivamente cercando di realizzare? Hai preso in considerazione il salvataggio dei dati nella sessione? –

+1

Quello che chiedi non è possibile - se stai facendo un reindirizzamento, deve essere una richiesta GET a cui stai reindirizzando, in modo che i parametri siano sempre visibili ai tuoi utenti. Dovresti invece immagazzinare cose nella sessione. – GregT

risposta

146

Basta aggiungere alle opzioni:

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

produrrebbe /thing/3/edit?something=else

+5

ma non voglio che sia visibile all'utente .... – markiv

+14

Non è possibile reindirizzare con un POST. Dai documenti HTTP 1.1 con le definizioni 3xx: "L'azione richiesta può essere eseguita dall'agente utente senza interazione con l'utente se e solo se il metodo utilizzato nella seconda richiesta è GET o HEAD." Espandi ciò che stai cercando di realizzare e probabilmente ti spingeremo nella direzione giusta. – jdl

+0

Ciao Grazie mille per la tua risposta. Sono un principiante dello sviluppo web. Sto cercando di conoscere diversi modi per invocare un'azione. La tua risposta ha chiarito molti dei miei dubbi. Grazie ancora :)) – markiv

68

Se si sta utilizzando le risorse RESTful è possibile effettuare le seguenti operazioni:

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

È possibile passare oggetti arbitrari per il modello con il parametro flash.

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

E quindi accedervi nel modello tramite l'hash.

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

Questa è una cattiva pratica. Questo metodo utilizza in modo improprio l'oggetto Flash, che è destinato alla messaggistica utente. Sarebbe meglio memorizzare parametri arbitrari nella sessione e quindi cancellare i parametri dalla sessione quando hai finito. – GregT

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

Potete fornire qualche spiegazione in più. Solo un esempio di codice non è davvero sufficiente. – simonmenke

38

Se si dispone di alcuni dati del modulo, ad esempio inviato a casa # azioni, ora si vuole reindirizzare loro di casa # atto, mantenendo i parametri, si può fare questo

redirect_to act_house_path(request.parameters)

+1

Sai come si combinerebbe questo, oltre a nuovi parametri? cioè request.parameters, (o +): this =>: that –

+4

È possibile utilizzare il metodo di unione. Per esempio: 'redirect_to act_house_path (request.parameters.merge (tasto: "value"))' – GregT

+1

Si potrebbe anche utilizzare il metodo di eccezione di escludere params indesiderati dopo la fusione: 'redirect_to act_house_path (request.parameters.except (: authenticity_token,: controller,: action,: 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 

Qualsiasi controller che si desidera reindirizzare con i parametri sono i seguenti:

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