设计路线被调用时被跳过
Posted
技术标签:
【中文标题】设计路线被调用时被跳过【英文标题】:Devise Route being skipped when called 【发布时间】:2018-07-21 08:13:16 【问题描述】:在我实现引导主题之前,我的设计路线运行良好。现在,它正在跳过注销路线以进行设计,就好像它没有被调用一样。我对此有点困惑。这是我的路线文件的一部分:
/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,应该由Members的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
所以,我知道它正在以正确的顺序正确处理路由。当我在末尾使用_path
或_url
调用destroy_member_session
时,浏览器会显示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
,结果相同。我在网上读到可能是用于引导程序或 Jquery 的 javascript 正在干扰以阻止 [DELETE]
请求。我尝试删除所有 javascript 和 css 文件的调用,结果仍然相同。
我现在很茫然,真的可以求助一下。
将橡皮鸭放在电脑上,然后像在这个问题中解释的那样离开并没有提供解决方案。
【问题讨论】:
您能否确认rails_ujs
或jquery_ujs
存在于您的application.js
中?
Arrgggg... 我知道在 Rails 5.1 中,rails_ujs
被移入 Rails 本身,不再需要。但是,我没有将//= require jquery_ujs
放入application.js
文件中。谢谢你,@AneesMuhammed!!!!这就是答案。如果你想写答案,我会标记它。
很高兴我能提供帮助。我已经添加了答案!@Christopher Warrington
【参考方案1】:
既然你提到了,你的method: :delete
不起作用,你可能错过了application.js
中的jquery_ujs
或rails_ujs
(rails 5.1+)。如果没有,则将其添加到此处。
【讨论】:
以上是关于设计路线被调用时被跳过的主要内容,如果未能解决你的问题,请参考以下文章