Я читаю эти две страницы
Шоу страницы Rails Guides
map.resources :photos, :new => { :upload => :post }
И его соответствующий URL
/photos/upload
Это выглядит замечательным.
Мой routes.rb
шоу это
map.resources :users, :new => { :signup => :get, :register => :post }
Когда я делаю: [~/my_app]$ rake routes
Я вижу два новых добавленные маршрута
signup_new_user GET /users/new/signup(.:format)
register_new_user POST /users/new/register(.:format)
Отметьте включение /new
! я не хочу это. Я просто хочу /users/signup
и /users/register
(как описано в направляющих, Направляющих Руководство).
Какая-либо справка?
Когда вы открываете контроллер как ресурс, автоматически добавляются следующие действия:
show
index
new
create
edit
update
destroy
Эти действия можно отнести к категории в две группы:
: member
actions URL-адрес для действия member имеет идентификатор целевого ресурса. Например:
users/1/edit
users/1
Вы можете думать о действии : member
как о методе экземпляра класса. Он всегда применяется к существующему ресурсу.
Действия участников по умолчанию: показать
, изменить
, обновить
, уничтожить
: коллекция
действия URL-адрес для действие : collection
не содержит идентификатор целевого ресурса. Например:
users/login
users/register
Вы можете думать о действии : collection
как о статическом методе класса.
Действия сбора по умолчанию: index
, new
, create
В вашем случае вам нужны два новых действия для регистрации. Эти действия принадлежат к типу: collection (поскольку у вас нет идентификатора пользователя при отправке этих действий). Ваш маршрут может быть следующим:
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]
Edit 1
I обычно обрабатывают действие подтверждение
как действие : 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
Если я правильно понимаю ваш вопрос, вы просто хотите переименовать URL-адреса new
и create
действия.
Это будет сделано следующим образом:
map.resources :users, :path_names => {:new => 'signup', :create => 'register'}
Если вы действительно хотите добавить новых маршрутов с соответствующими действиями контроллера, то ответ Damiens - это то, что вам нужно.
Параметр новый
позволяет создавать новые маршруты для создания новых объектов. Вот почему они начинаются с этого термина.
Вам нужна опция : collection
.
map.resources :users, :collection => { :signup => :get, :register => :post }
При этом будут созданы URL-адреса / users / signup
и / users / register
.