Kiedy wystawiać kontrolera jako zasób, następujące działania są automatycznie dodawane:
show
index
new
create
edit
update
destroy
Działania te można podzielić na dwie grupy:
Adres URL akcji członka ma identyfikator zasobu docelowego. MI.g:
users/1/edit
users/1
Można myśleć o :member
działania jako metody instancji w klasie. Zawsze ma zastosowanie do istniejącego zasobu.
działania członków domyślnie: show
, edit
, update
, destroy
URL do akcji :collection
nie zawiera identyfikator zasobu docelowego. Np:
users/login
users/register
Można myśleć o :collection
działania jako metody statycznej na klasy.
akcje zbiórki domyślnie: index
, new
, create
w Twoim przypadku potrzebne są dwa nowe działania w celu zarejestrowania. Te działania należą do: typ kolekcji (ponieważ nie masz identyfikatora użytkownika podczas przesyłania tych działań). Trasa może być następująca:
map.resources :users, :collection => { :signup => :get, :register => :post }
URL dla działań są następujące:
users/signup
users/register
Jeśli chcesz usunąć standardowego działania wygenerowany przez Rails używać: z wyjątkiem /: Tylko opcji:
map.resources :foo, :only => :show
map.resources :foo, :except => [:destroy, :show]
Edycja 1
zwykle t odegrać akcję confirmation
jako akcję :member
. W tym przypadku params[id]
będzie zawierał kod potwierdzający.
konfiguracja trasy:
map.resources :users, :member => { :confirm => :get}
URL
/users/xab3454a/confirm
confirm_user_path(:id => @user.confirmation_code) # returns the URL above
Kontroler
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, to wyjaśnienie wygląda świetnie. Jako kontynuację, by sprawdzić, czy rozumiem, powiedz, że chciałem wysłać link "potwierdzenie rachunku" w e-mailu powitalnym użytkownika. To łącze zawierałoby 8-znakowy skrót sprawdzania poprawności. Czy mogę dodać 'map.resources: users,: member => {: validate =>: get}'? W jaki sposób podłączono parametr 'hash'? –
Zaktualizowałem moją odpowiedź, spójrz. –
Co mówi 'confirm_user_path' używać' @ user.confirmation_code' zamiast wieloznacznika ': id' zamiast' @ user.foo' lub '@ user.bar'? Czy powinno to być 'confirm_user_path (: id => @ user.confirmation_code)'? –