调用时跳过设计路线
Devise Route being skipped when called
在我实施 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,应该由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。所以,这是有效的并调用了正确的路线。
视图中正在使用的代码:
<%= link_to 'Logout', destroy_member_session_path, method: :delete %>
点击link时,根据终端信息,显示为ministries#show
处理;因为它是 root_path 之后未被另一条路线捕获的所有路线。如果没有事工,则会显示一条错误消息,指出没有找到事工(这是我收到的屏幕错误)。
为了进一步测试,我删除了事工路线,因此删除了 catchall。当我尝试注销时,我收到一条错误消息:No route matches [GET] "/logout"
.
现在这告诉我它没有看到 method: :delete
被添加到 link_to
因为它正在尝试 [GET]
而不是 [DELETE]
.
我尝试将 method: :delete
更改为 :method => :delete
,结果相同。我在网上看到,bootstrap 或 Jquery 的 javascript 可能会干扰阻止 [DELETE]
请求。我尝试删除所有 javascript 和 css 文件的调用,结果仍然相同。
我现在很茫然,真的需要一些帮助。
将橡皮鸭放在电脑上然后离开,因为在这个问题中解释它并没有提供解决方案。
既然你提到过,你的 method: :delete
不工作,你可能错过了 [=13] 或 rails_ujs
(rails 5.1+) =].如果没有,将其添加到那里将使它起作用。
在我实施 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,应该由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。所以,这是有效的并调用了正确的路线。
视图中正在使用的代码:
<%= link_to 'Logout', destroy_member_session_path, method: :delete %>
点击link时,根据终端信息,显示为ministries#show
处理;因为它是 root_path 之后未被另一条路线捕获的所有路线。如果没有事工,则会显示一条错误消息,指出没有找到事工(这是我收到的屏幕错误)。
为了进一步测试,我删除了事工路线,因此删除了 catchall。当我尝试注销时,我收到一条错误消息:No route matches [GET] "/logout"
.
现在这告诉我它没有看到 method: :delete
被添加到 link_to
因为它正在尝试 [GET]
而不是 [DELETE]
.
我尝试将 method: :delete
更改为 :method => :delete
,结果相同。我在网上看到,bootstrap 或 Jquery 的 javascript 可能会干扰阻止 [DELETE]
请求。我尝试删除所有 javascript 和 css 文件的调用,结果仍然相同。
我现在很茫然,真的需要一些帮助。
将橡皮鸭放在电脑上然后离开,因为在这个问题中解释它并没有提供解决方案。
既然你提到过,你的 method: :delete
不工作,你可能错过了 [=13] 或 rails_ujs
(rails 5.1+) =].如果没有,将其添加到那里将使它起作用。