Когда вы выставляете контроллер как ресурс, автоматически добавляются следующие действия:
show
index
new
create
edit
update
destroy
Эти действия можно разделить на две группы:
URL-адрес действия участника содержит идентификатор целевого ресурса. Например:
users/1/edit
users/1
Вы можете думать о :member
действии как о методе экземпляра в классе. Он всегда применяется к существующему ресурсу.
Действия члена по умолчанию: show
, edit
, update
, destroy
URL-адрес для действия :collection
не содержит идентификатор целевого ресурса. Например:
users/login
users/register
Вы можете думать о :collection
действии как о статическом методе в классе.
Действия по умолчанию для сбора: index
, new
, create
В вашем случае вам нужно два новых действия для регистрации. Эти действия относятся к: типу коллекции (поскольку у вас нет идентификатора пользователя при отправке этих действий). Ваш маршрут может быть следующим:
map.resources :users, :collection => { :signup => :get, :register => :post }
URL-адрес действий:
users/signup
users/register
Если вы хотите удалить стандартное действие, сгенерированное Rails, используйте: кроме /: только опции:
map.resources :foo, :only => :show
map.resources :foo, :except => [:destroy, :show]
Редактировать 1
Обычно я рассматриваю действие confirmation
как действие :member
. В этом случае params[id]
будет содержать код подтверждения.
Конфигурация маршрута:
map.resources :users, :member => { :confirm => :get}
URL
/users/xab3454a/confirm
confirm_user_path(:id => @user.confirmation_code) # returns the URL above
Контроллер
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