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