我的设计路线工作正常,直到我实现了一个bootstrap主题。现在,它正在跳过设计的注销路线,好像它没有被调用一样。我有点困惑。这是我的路线文件的一部分:
/config/routes.rb
Rails.application.routes.draw do
######################
### Pages ###
######################
root to: "pages#home"
get 'about-us', as: 'about_us', to: 'pages#about'
get 'status', as: 'about_status', to: 'pages#status'
get 'verify', as: 'verify_status', to: 'pages#verify'
get 'contact-us', as: 'contact_us', to: 'pages#contact'
######################
### Members ###
######################
devise_for :members,
controllers: {
sessions: 'members/sessions',
registrations: 'members/registrations'
},
path: '', path_names: {
sign_in: 'login',
sign_out: 'logout',
sign_up: 'register',
edit: ':username/account/edit'
}
get 'cancel_membership', as: 'cancel_membership', to: 'pages#cancel'
###############################
### Ministries & Projects ###
###############################
resources :ministries, except: [:index, :show]
resources :projects, except: [:index, :show]
get 'ministries', as: 'ministries_index', to: 'ministries#index'
get 'ministry-projects', as: 'projects_index', to: 'projects#index'
get ':ministry', as: 'ministry_page', to: 'ministries#show'
get ':ministry/:project', as: 'project_page', to: 'projects#show'
end
如您所见,Devise路由首先被声明,所以如果一个人进入root_path / logout,它应该由成员的Devise控制器处理;特别是members/sessions#destroy
。
当我rake routes
时,我看到了这个(部分):
new_member_session GET /login(.:format) members/sessions#new
member_session POST /login(.:format) members/sessions#create
destroy_member_session DELETE /logout(.:format) members/sessions#destroy
...
ministries_index GET /ministries(.:format) ministries#index
projects_index GET /ministry-projects(.:format) projects#index
ministry_page GET /:ministry(.:format) ministries#show
project_page GET /:ministry/:project(.:format) projects#show
所以,我知道它正在以正确的顺序正确处理路线。当我在结尾处使用destroy_member_session
或_path
致电_url
时,浏览器会显示localhost:3000/logout
的链接。所以,这是有效的,并呼吁正确的路线。
正在使用的代码:
<%= link_to 'Logout', destroy_member_session_path, method: :delete %>
当点击链接时,根据终端中的信息,它显示为由ministries#show
处理;因为它是root_path之后的所有路径的捕获,以前没有被其他路由捕获。如果没有事工,那么会显示一条错误,指出没有找到任何事工(这是我得到的屏幕错误)。
为了进一步测试,我删除了部门路线,因此删除了捕获。当我尝试注销时,收到错误消息:No route matches [GET] "/logout"
。
现在告诉我,method: :delete
没有看到link_to
被添加到[GET]
,因为它正在尝试[DELETE]
而不是method: :delete
。
我尝试将:method => :delete
更改为[DELETE]
,结果相同。我在网上看到,可能是一个用于引导程序的javascript或者Jquery正在干扰阻止{{1}}请求。我尝试删除所有javascript和css文件的调用,但仍然是相同的结果。
我现在不知所措,可以真正使用一些帮助。
答案 0 :(得分:1)
由于您已经提到过,method: :delete
无法使用,您可能已经错过了jquery_ujs
rails_ujs
或application.js
(有轨道5.1+)。如果没有那么将它添加到那里将使它工作。