Как добавить пользовательский УСПОКОИТЕЛЬНЫЙ маршрут к приложению для направляющих?

Я читаю эти две страницы

  1. resources
  2. Adding more RESTful actions

Шоу страницы 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 (как описано в направляющих, Направляющих Руководство).

Какая-либо справка?

22
задан maček 26 November 2012 в 04:48
поделиться

3 ответа

Когда вы открываете контроллер как ресурс, автоматически добавляются следующие действия:

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
61
ответ дан 29 November 2019 в 03:30
поделиться

Если я правильно понимаю ваш вопрос, вы просто хотите переименовать URL-адреса new и create действия.

Это будет сделано следующим образом:

map.resources :users, :path_names => {:new => 'signup', :create => 'register'}

Если вы действительно хотите добавить новых маршрутов с соответствующими действиями контроллера, то ответ Damiens - это то, что вам нужно.

3
ответ дан 29 November 2019 в 03:30
поделиться

Параметр новый позволяет создавать новые маршруты для создания новых объектов. Вот почему они начинаются с этого термина.

Вам нужна опция : collection .

map.resources :users, :collection => { :signup => :get, :register => :post }

При этом будут созданы URL-адреса / users / signup и / users / register .

1
ответ дан 29 November 2019 в 03:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: