Wenn Sie einen Controller als Ressource aussetzen, werden folgende Aktionen automatisch hinzugefügt:
show
index
new
create
edit
update
destroy
Diese Aktionen in zwei Gruppen kategorisiert werden können:
Die URL für die Mitgliedsaktion hat die ID der Zielressource. E.g:
users/1/edit
users/1
können Sie denken an :member
Aktion als eine Instanz Methode für eine Klasse. Es gilt immer für eine vorhandene Ressource.
Standard Mitglied Aktionen: show
, edit
, update
, destroy
Die URL für die :collection
Aktion nicht die ID der Zielressource enthalten. Z. B:
users/login
users/register
können Sie denken an :collection
Aktion als statische Methode für eine Klasse.
Standard Sammlung Aktionen: index
, new
, create
In Ihrem Fall müssen Sie zwei neue Aktionen für die Registrierung. Diese Aktionen gehören zu: Sammlungsart (da Sie beim Senden dieser Aktionen nicht die ID des Benutzers haben). Ihr Weg kann wie folgt sein:
map.resources :users, :collection => { :signup => :get, :register => :post }
Die URL für die Aktionen sind wie folgt:
users/signup
users/register
Wenn Sie eine Standard-Aktion von Rails erzeugt entfernen verwenden: Ausnahme /: nur Optionen:
map.resources :foo, :only => :show
map.resources :foo, :except => [:destroy, :show]
bearbeiten 1
ich in der Regel t reat die confirmation
Aktion als :member
Aktion. In diesem Fall enthält params[id]
den Bestätigungscode.
Strecke Konfiguration:
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, diese Erklärung sieht gut aus. Als Follow-up, um nach meinem Verständnis zu suchen, sage ich, dass ich in der Willkommens-E-Mail des Benutzers einen Link "Konto-Bestätigung" senden möchte. Diese Verbindung würde einen achtstelligen Validierungshash enthalten. Würde ich 'map.resources: users,: member => {: validate =>: get}' hinzufügen? Wie wird der Hash-Parameter eingebunden? –
Aktualisiert meine Antwort, werfen Sie einen Blick. –
Was sagt 'confirm_user_path',' 'user.confirmation_code' 'anstelle des': id' Platzhalters anstelle von '@ user.foo' oder' @ user.bar' zu verwenden? Sollte dies 'confirm_user_path (: id => @ user.confirmation_code)' sein? –