Противоречивые разработки и спокойные маршруты контроллеров | Рельсы 5.2 - PullRequest
0 голосов
/ 31 августа 2018

Я работаю над проектом Rails 5.2, который использует Devise для управления моделью User. Я хочу, чтобы пользователи могли регистрироваться и позволять администраторам создавать учетные записи от их имени. Я настроил модель User с Devise и сгенерировал контроллеры области (и представления) для ресурса. Это относится к аспекту самостоятельной регистрации, а для регистрации, инициированной администратором, я создал users_controller в качестве стандартного контроллера restful, а в маршрутах соответственно настроил маршрут ресурсов. Похоже, это работает для всего, кроме users#create маршрута действия, конфликтующего с маршрутом, созданным devise_for для users/registrations#create (см. Сгенерированные маршруты ниже). Это заставляет users#new отправку форм неправильно обрабатываться устройством users/registrations#create вместо users#create.

Как лучше всего сделать маршруты *#create уникальными?

routes.rb

Rails.application.routes.draw do
  devise_for :users, controllers: { sessions: 'users/sessions', registrations: 'users/registrations' }

  resources :users
end

Сгенерированные маршруты

        new_user_session GET    /users/sign_in(.:format)        users/sessions#new
            user_session POST   /users/sign_in(.:format)        users/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)       users/sessions#destroy
       new_user_password GET    /users/password/new(.:format)   devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format)  devise/passwords#edit
           user_password PATCH  /users/password(.:format)       devise/passwords#update
                         PUT    /users/password(.:format)       devise/passwords#update
                         POST   /users/password(.:format)       devise/passwords#create
cancel_user_registration GET    /users/cancel(.:format)         users/registrations#cancel
   new_user_registration GET    /users/sign_up(.:format)        users/registrations#new
  edit_user_registration GET    /users/edit(.:format)           users/registrations#edit
       user_registration PATCH  /users(.:format)                users/registrations#update
                         PUT    /users(.:format)                users/registrations#update
                         DELETE /users(.:format)                users/registrations#destroy
                         POST   /users(.:format)                users/registrations#create
---
                   users GET    /users(.:format)                users#index
                         POST   /users(.:format)                users#create
                new_user GET    /users/new(.:format)            users#new
               edit_user GET    /users/:id/edit(.:format)       users#edit
                    user GET    /users/:id(.:format)            users#show
                         PATCH  /users/:id(.:format)            users#update
                         PUT    /users/:id(.:format)            users#update
                         DELETE /users/:id(.:format)            users#destroy

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Вы можете настроить маршрут устройства , чтобы иметь отличительный путь (т. Е. 'Auth')

routes.rb

Rails.application.routes.draw do
  devise_for :users, path: 'auth', controllers: { sessions: 'users/sessions', registrations: 'users/registrations' }
  resources :users
end
0 голосов
/ 31 августа 2018

как то так

devise_for :users, controllers: { sessions: 'users/sessions', registrations: 'users/registrations' }

devise_scope :user do
  post   '/users/create'  => 'users#create',  as: :create_user
  get   '/users'  => 'users#index',  as: :list_users
  get   '/users/:id' => 'users#show', as: :show_user
end

или вы можете пропустить create action при определении resources :users, except: :create и использовать registrations_controller create.

...