2012-02-21 15 views
12

Vorrei passare un parametro tramite un metodo link_to in Rails. So che c'è un modo per farlo tramite l'URL, ma davvero non voglio farlo. C'è un modo per passare un parametro tramite un link senza aggiungerlo al link stesso?Parametri del passaggio in Link_to

So che in PHP è possibile pubblicare e quindi recuperare tale valore utilizzando la variabile post. C'è qualcosa di simile in Rails?

risposta

10

link_to firma appare come segue:

link_to(body, url_options = {}, html_options = {}) 

Quindi, POST sarebbe simile (diciamo che si desidera pubblicare i dati degli utenti): i dati

link_to "Link text", some_path(:foo => "bar", :baz => "quux"), user: @user, :method => :post 

dell'utente possono essere recuperati nel controller utilizzando params[:user]

3

Il passaggio di informazioni tramite una richiesta Web può essere effettuato dall'URL: http://example.com/foo?bar=blah in una richiesta GET che è ciò che link_to fa, o attraverso un'operazione POST che di solito richiede un modulo. La forma potrebbe avere elementi nascosti se si desidera solo un pulsante di invio:

<form method="POST" action="http://example.com/foo"> 
    <input type="hidden" name="bar" value="blah"> 
    <input type="submit"> 
</form> 

ci sono vari rotaie aiutanti per aiutare a costruire la forma, se necessario.

Infine, se si in realtà si desidera un collegamento, è possibile utilizzare sia lo stile CSS che il pulsante oppure è possibile utilizzare javascript per osservare un collegamento e quindi POST le informazioni. (il metodo pubblicato da Simon Bagreev lo fa con javascript)

+0

Grazie. Non riuscivo a capire perché la soluzione di Simon Bagreev avrebbe funzionato. Ora, devo cercare una spiegazione in CSS o JavaScript. – Katarzyna

1

Che tipo di parametro? Se è una chiave per una richiesta GET, la convenzione imporrebbe l'utilizzo dell'URL (ad esempio params [: id] o una variabile del percorso record attiva). Se vuoi POST qualcosa, dovresti usare un modulo. Altrimenti, potresti scrivere un metodo di supporto per impostare una variabile di sessione o qualcosa del genere, ma pensa alla tua architettura e a cosa stai cercando di fare semanticamente, e sono sicuro che qualcuno qui può aiutarti.

+0

Essenzialmente è una richiesta GET, quindi probabilmente non dovrei fare quello che voglio fare e seguire semplicemente la convenzione. Attualmente, ho le mie rotte abbastanza nidificate - già usando circa 6 segmenti nell'URL. Stavo cercando di evitare l'uso dell'URL per inserire altri segmenti. – Kyle

5

Ecco come è possibile passare un parametro tramite il metodo link_to per, ad esempio, creare un nuovo oggetto con il parametro passato. Questa strategia permetterebbe di passare variabili tra le azioni nel vostro controller e creare oggetti con attributi predefiniti:

dire nel tuo mostrano vista, si dispone di una variabile chiamata @pippo che si desidera passare alla nuova Azione del controller. In questo caso, nella vostra spettacolo vista, si può avere

<%= link_to "Link Text", new_widget_path(:foo => @foo) %> 

che memorizzare @pippo in params [: foo], che consente di utilizzare params [: foo] nel controller. L'azione del controllore a cui viene indirizzata dipende da * new_widget_path *. In questo caso, verrai indirizzato all'azione nuova in WidgetController.

Cliccando sul Link Text dirigerà Rails al nuova azione del vostro WidgetController.Si può avere

def new 
    @widget = Widget.new(:foo => params[:foo]) 
end 

Poi, nel new.html.erb file di vista, è possibile consentire all'utente di creare un nuovo oggetto Widget con questo pre-definito foo attributo già compilato tramite una nascosta campo modulo:

<%= form_for(@widget) do |f| %> 
    <%= f.label :other_attribute %><br /> 
    <%= f.text_field :other_attribute %> 
    <%= f.hidden_field :foo %> 
    <%= f.submit %> 
<% end %> 

Permettendo all'utente di creare un nuovo widget con il foo attributo già compilato!

+1

Ciò che sorprende di questa soluzione è che è così dettagliato e chiaramente spiegato. Grazie mille per la pubblicazione. Ancora utile un anno dopo. – camdixon

+0

Questo esempio non mostra ancora come "nascondere" i parametri in url dopo aver fatto clic su link_to, prima di arrivare alla forma sulla nuova pagina. – Katarzyna