Passando i parametri nelle rotaie redirect_to


202

Come passiamo i parametri in redirect_to in rotaie? So che possiamo passare l'ID usando questo:

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

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

MODIFICARE:

Per la sintassi di Ruby 2 devi aggiornare lo snippet sopra a:

redirect_to action: action_name, id: 3

3
Cosa stai effettivamente cercando di realizzare? Hai pensato di salvare i dati nella sessione?
Michael Sepcot,

1
Quello che stai chiedendo non è possibile: se stai eseguendo un reindirizzamento, deve essere una richiesta GET a cui stai reindirizzando, quindi i parametri saranno sempre visibili ai tuoi utenti. Dovresti invece archiviare elementi nella sessione.
GregT

Risposte:


174

Basta aggiungerli alle opzioni:

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

Cederebbe /thing/3/edit?something=else


22
Non puoi reindirizzare con un POST. Dai documenti HTTP 1.1 secondo le definizioni 3xx: "L'azione richiesta PUO '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 davvero cercando di realizzare e probabilmente potremo spingerti nella direzione corretta.
jdl,

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

Pollice su. Lo cerco da 1 ora.

86

Se si utilizzano 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')

46

Se hai alcuni dati del modulo, ad esempio inviati a home # action, ora vuoi reindirizzarli a house # act mantenendo i parametri, puoi farlo

redirect_to act_house_path(request.parameters)


1
Sai come combineresti questo, oltre a nuovi parametri? cioè request.parameters, (o +): this =>: that
Chris Edwards,

5
È possibile utilizzare il metodo di unione. Ad esempio:redirect_to act_house_path(request.parameters.merge(key: "value"))
GregT,

3
È inoltre possibile utilizzare il metodo di esclusione per escludere parametri indesiderati dopo l'unione:redirect_to act_house_path(request.parameters.except(:authenticity_token, :controller, :action, :utf8, :commit)
sig. Io

39

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

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

E poi accedi ad essi nel modello tramite l'hash.

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

63
Questa è una cattiva pratica. Questo metodo utilizza in modo improprio l'oggetto flash, destinato alla messaggistica dell'utente. Meglio sarebbe memorizzare parametri arbitrari nella sessione e quindi cancellare quei parametri dalla sessione quando hai finito.
GregT


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

6
Potete per favore fornire qualche spiegazione in più. Solo un esempio di codice non è davvero abbastanza.
simonmenke,

7

Se stai cercando un modo per passare parametri URL aggiuntivi (non controller, azione, ID, ecc.), Ecco un metodo affidabile per farlo:

object_path(@object, params: request.query_parameters)

Questo passerà lungo i parametri utm o qualsiasi altro parametro aggiuntivo che non vuoi perdere.


4

routes.rb

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

I controller che desideri reindirizzare con i parametri sono indicati di seguito:

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

3

Instrada il tuo percorso, prendi il params, e ritorna:

redirect_to controller: "client", action: "get_name", params: request.query_parameters and return
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.