ruby-on-rails - 冲突的 Devise 和 restful Controller 路由 | rails 5.2

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

我正在开发一个使用 Devise 管理 User 模型的 Rails 5.2 项目。我希望用户能够自行注册,并允许管理员代表他们创建帐户。我已经使用 Devise 设置了 User 模型,并为资源生成了作用域 Controller (和 View )。这涵盖了自注册方面,并涵盖了管理员发起的注册,我创建了一个 users_controller 作为标准的 restful Controller ,并在路由中分别设置了一个资源路由。这似乎适用于除 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_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_controller create.

关于ruby-on-rails - 冲突的 Devise 和 restful Controller 路由 | rails 5.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52108670/

相关文章:

ruby-on-rails - 为什么在 ruby​​-on-rails 中默认选择端口 3000

Ruby 无法创建目录

ruby-on-rails - 无法弄清楚这个 Rails 错误 : undefined method `remember_token=' for #<User:0x00000005e44238>?

ruby - 在 Emacs irb (inferior-ruby-mode) 中,如何使自动完成功能遵循 Ruby 模式缓冲区中的单词?

devise - 具有cans的rails_admin无法捕获重定向的拒绝访问异常

ruby-on-rails - Rails 数据库配置没有指定适配器。我该怎么办?

javascript - Firefox 中的混合内容阻止行为

ruby-on-rails - RoR : POST to a page using raw form data. 怎么样?

ruby-on-rails - 在未确认时设计重定向到自定义 url 而不是 flash 通知

mysql - 使用 devise 和 activeadmin 设置新的 Rails 应用程序时,schema.rb 最终为空