【问题标题】:Conflicting Devise and restful controller routes | Rails 5.2冲突的设计和restful控制器路由|导轨 5.2
【发布时间】:2018-08-31 04:54:34
【问题描述】:

我正在开发一个使用 Devise 管理 User 模型的 Rails 5.2 项目。我希望用户能够自己注册,并允许管理员代表他们创建帐户。我已经使用 Devise 设置了 User 模型,并为资源生成了作用域控制器(和视图)。这涵盖了自我注册方面,为了涵盖管理员发起的注册,我创建了一个users_controller 作为标准的restful 控制器,并在路由中分别设置了一个资源路由。这似乎适用于除users#create 操作路由与devise_forusers/registrations#create 创建的路由冲突之外的所有内容(请参阅下面生成的路由)。这会导致 users#new 表单提交被 Devise 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

【问题讨论】:

  • 您可以将 devise_scope 用于 users 的自定义路由。

标签: ruby-on-rails ruby devise rails-routing


【解决方案1】:

类似的东西

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

或者你可以在定义resources :users, except: :create时跳过create action并使用registrations_controllercreate

【讨论】:

    【解决方案2】:

    你可以configure the devise route有一个区分路径(即'auth')

    routes.rb

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

    【讨论】:

      【解决方案3】:

      你需要this:

        devise_for :users, path: 'auth', controllers: {
          sessions: 'web/users/sessions',
          registrations: 'web/users/registrations'
        }
      

      【讨论】:

        猜你喜欢
        • 2011-02-11
        • 1970-01-01
        • 1970-01-01
        • 2015-03-29
        • 2014-01-24
        • 2012-12-24
        • 1970-01-01
        • 1970-01-01
        • 2012-11-05
        相关资源
        最近更新 更多