调用时跳过设计路线

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+) =].如果没有,将其添加到那里将使它起作用。