【发布时间】: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