2012-02-16 18 views
20

Sono nuovo di Rails e sto cercando di utilizzare il link_to helper per creare un collegamento che emette una richiesta PUT anziché una richiesta GET. Nello specifico, sto cercando di creare un collegamento che attivi l'account di un utente nella mia app dal pannello dell'amministratore. Sto usando Rails 3.0.5.Ruby on Rails link_to Con put Metodo

Il mio file routes.rb ha:

match '/admin/users/:id/activate' => 'admin#activate_user', 
    :action => :activate_user, :via => :put 

mio punto di vista ha:

link_to 'Activate', :action => :activate_user, :id => user.id, :method => :put 

Tuttavia, questo genera l'URL (per esempio) /admin/users/7/activate?method=put con il codice sorgente <a href="/admin/users/7/activate?method=put">Activate</a>.

mi piacerebbe per generare, invece, <a href = "/admin/users/7/activate" data-method="put">Activate</a>

mi rendo conto che potrei usare button_to, ma sono stato alle prese con questo problema per un po 'e io sono confuso perché sto vedendo questo comportamento, quando altri tutorial dicono che quello che sto facendo dovrebbe essere valido. Come posso fare per creare un link_per aiutante con il comportamento che voglio?

risposta

25

Aggiornamento - L'helper link_to eseguirà un GET a meno che non venga specificato un metodo.

È meglio specificare il tipo di richiesta esatto, anziché match nel file di rotte. Come sulla sostituzione match da put in percorsi come:

put '/admin/users/:id/activate' => 'admins#activate_user', :as => 'activate_user' 

link_to 'Activate', activate_user_path(user.id), method: :put 

Procedimento activate_user deve risiedere nella admins controllore. Il docs ha più informazioni sull'assistente link_to.

+1

cosa produce i percorsi di rastrello per il percorso sopra indicato ?? Puoi postarlo? – prasvin

+1

Funziona, grazie! Ed è la soluzione più pulita :) – maksim

+4

Questo non funziona per me. Se non è definito alcun metodo nel link_to, viene visualizzato un messaggio di errore No route corrisponde a [GET]. – ndemoreau

30

link_to:method => :put è parte dell'hash del percorso. Devi dirlo diversamente. Avvolgi il tuo percorso tra parentesi.

link_to 'Activate', {:action => :activate_user, :id => user.id}, :method => :put 

Ora link_to riconosceranno :method => :put come opzione, non fa parte del percorso del collegamento.

Come nota a margine, dovresti provare a utilizzare gli helper di percorso anziché gli hash del percorso quando possibile. Mantiene le cose belle e ordinate ed evita situazioni pignoli come questo.