Quando si espone un controller come una risorsa, sono aggiunti automaticamente seguenti azioni:
show
index
new
create
edit
update
destroy
Queste azioni possono essere classificati in due gruppi: le azioni
L'URL per l'azione membro ha l'id della risorsa di destinazione. E.g:
users/1/edit
users/1
si può pensare :member
azione come un metodo di istanza su una classe. Si applica sempre a una risorsa esistente.
azioni membro predefinito: show
, edit
, update
, destroy
L'URL per l'azione :collection
non contiene l'ID della risorsa di destinazione. Per esempio:
users/login
users/register
si può pensare :collection
azione come un metodo statico su una classe.
azioni di recupero di default: index
, new
, create
nel tuo caso si bisogno di due nuove azioni per la registrazione. Queste azioni appartengono a: tipo di raccolta (poiché non hai l'ID dell'utente mentre invii queste azioni). Il percorso può essere la seguente:
map.resources :users, :collection => { :signup => :get, :register => :post }
L'URL per le azioni sono i seguenti:
users/signup
users/register
Se si desidera rimuovere un'azione standard generato da Rails usa: tranne /: uniche opzioni:
map.resources :foo, :only => :show
map.resources :foo, :except => [:destroy, :show]
Modifica 1
solito t ricomporre l'azione confirmation
come azione :member
. In questo caso params[id]
conterrà il codice di conferma.
configurazione Percorso:
map.resources :users, :member => { :confirm => :get}
URL
/users/xab3454a/confirm
confirm_user_path(:id => @user.confirmation_code) # returns the URL above
controller
class UsersController < ApplicationController
def confirm
# assuming you have an attribute called `confirmation_code` in `users` table
# and you have added a uniq index on the column!!
if User.find_by_confirmation_code(params[id])
# success
else
# error
end
end
end
@KandadaBoggu, questa spiegazione sembra fantastica. Come follow-up per verificare la mia comprensione, dire che volevo inviare un link "conferma account" nell'e-mail di benvenuto dell'utente. Quel link contiene un hash di convalida di 8 caratteri. Vorrei aggiungere 'map.resources: users,: member => {: validate =>: get}'? Come viene inserito il parametro 'hash'? –
Aggiornato la mia risposta, dai un'occhiata. –
Cosa dice 'confirm_user_path' per usare' @ user.confirmation_code' al posto del carattere jolly ': id' invece di' @ user.foo' o '@ user.bar'? Dovrebbe essere 'confirm_user_path (: id => @ user.confirmation_code)'? –