【问题标题】:Devise: Duplicate routing entries despite my custom entries [duplicate]设计:尽管我的自定义条目重复路由条目[重复]
【发布时间】:2019-05-26 18:29:26
【问题描述】:

当我运行 rake routes | grep sessions 时,尽管我已经有自己的设置,但我得到了重复的条目。

这是我的输出:(顺便说一句,这些不是所有重复项。)

    new_user_session GET    /users/sign_in(.:format)  devise/sessions#new
        user_session POST   /users/sign_in(.:format)  devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
               login GET    /login(.:format)          devise/sessions#new
                     POST   /login(.:format)          devise/sessions#create
              logout DELETE /logout(.:format)         devise/sessions#destroy

前三个是 Devise 的默认路由设置,后三个是我在 config/routes.rb 中添加的设置。

这是我的 config/routes.rb 与设计有关的文件的示例:

Rails.application.routes.draw do
  root to: 'pages#index'

  # Users
  devise_for :users, controllers: {
     # I override a few actions in my own controller so I needed this
     registrations: 'users/registrations',
  }

  # FYI: as is an alias for devise_scope
  as :user do
    # devise/sessions_controller handlers
    get    'login',           to: 'devise/sessions#new'
    post   'login',           to: 'devise/sessions#create'
    delete 'logout',          to: 'devise/sessions#destroy'

    #.... other registrations controller settings that are also getting duplicated
  end

  # .... all my other application routes
end

我想我要问的是,自从我创建了自己的路由后,如何抑制 Devise 的默认路由?如果您需要更多我的rake routes 输出或config/routes.rb 文件,我可以提交全部内容。

编辑:

好的,看来我需要将 :path_names 哈希添加到我的 devise_for :users 块中。从https://devhints.io/devise,我可以在页面末尾看到一系列路径选项。此外,完全删除 :path 选项会给我一个符合我想要的无别名版本。

这是我必须做的(大部分)正确:

devise_for :users, :path => '',
  :path_names => {
    :sign_in => 'sign-in',
    :sign_out => 'sign-out',
    :password => '',
    :confirmation => 'verification',
    :unlock => 'unblock',
    :registration => 'register',
    :sign_up => '' },
    # ignore this, changing this probably wont fix anything plus I need it.
    controllers: {
     registrations: 'users/registrations'
  }

它并不完全完美,所以我会给任何可以告诉我如何获得的人的答案:

                    root GET    /                          pages#index
        new_user_session GET    /sign-in(.:format)         devise/sessions#new
            user_session POST   /sign-in(.:format)         devise/sessions#create
    destroy_user_session DELETE /sign-out(.:format)        devise/sessions#destroy
cancel_user_registration GET    /register/cancel(.:format) users/registrations#cancel
   new_user_registration GET    /register(.:format)        users/registrations#new
  edit_user_registration GET    /register/edit(.:format)   users/registrations#edit
       user_registration PATCH  /register(.:format)        users/registrations#update
                          PUT    /register(.:format)       users/registrations#update
                          DELETE /register(.:format)       users/registrations#destroy
                          POST   /register(.:format)       users/registrations#create
                 password GET    /password(.:format)       devise/passwords#new
           reset_password GET    /reset-password(.:format) devise/passwords#edit
                          PATCH  /reset-password(.:format) devise/passwords#update
                          PUT    /reset-password(.:format) devise/passwords#update
                          POST   /password(.:format)       devise/passwords#create

 I DONT WANT THE FOLLOWING IN MY ROUTES:
       new_user_password GET    /new(.:format)             devise/passwords#new
      edit_user_password GET    /edit(.:format)            devise/passwords#edit
           user_password PATCH  /                          devise/passwords#update
                         PUT    /                          devise/passwords#update
                         POST   /                          devise/passwords#create

我可以将 :password => '' 更改为 :password => 'reset-password' 但随后我得到了这些:

 new_user_password GET  /reset-password/new(.:format)  devise/passwords#new
edit_user_password GET  /reset-password/edit(.:format) devise/passwords#edit
                   POST /reset-password(.:format)      devise/passwords#create

当我想要的是这样的:

 new_user_password GET  /password(.:format)       devise/passwords#new
edit_user_password GET  /reset-password(.:format) devise/passwords#edit
                   POST /password(.:format)       devise/passwords#create

【问题讨论】:

    标签: ruby-on-rails devise routes


    【解决方案1】:

    好的,看来我需要将 :path_names 哈希添加到我的 devise_for :users 块中。从https://devhints.io/devise,我可以在页面末尾看到一系列路径选项。此外,完全删除 :path 选项会给我一个符合我想要的无别名版本。

    编辑:

    除了我发现的(并包含在我的问题中)之外,我还发现了 :skip 选项。有人已经问过我一个类似的问题,而对此的完美答案(告诉设计不要生成任何我想覆盖的路线)就在这里:

    https://stackoverflow.com/a/46900434/43792

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多