设计路线被调用时被跳过

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 =&gt; :delete,结果相同。我在网上读到可能是用于引导程序或 Jquery 的 javascript 正在干扰以阻止 [DELETE] 请求。我尝试删除所有 javascript 和 css 文件的调用,结果仍然相同。

我现在很茫然,真的可以求助一下。

将橡皮鸭放在电脑上,然后像在这个问题中解释的那样离开并没有提供解决方案。

【问题讨论】:

您能否确认rails_ujsjquery_ujs 存在于您的application.js 中? Arrgggg... 我知道在 Rails 5.1 中,rails_ujs 被移入 Rails 本身,不再需要。但是,我没有将//= require jquery_ujs 放入application.js 文件中。谢谢你,@AneesMuhammed!!!!这就是答案。如果你想写答案,我会标记它。 很高兴我能提供帮助。我已经添加了答案!@Christopher Warrington 【参考方案1】:

既然你提到了,你的method: :delete 不起作用,你可能错过了application.js 中的jquery_ujsrails_ujs(rails 5.1+)。如果没有,则将其添加到此处。

【讨论】:

以上是关于设计路线被调用时被跳过的主要内容,如果未能解决你的问题,请参考以下文章

Boost.Python dll 在编译时被跳过

软件设计

为啥我的部分代码被跳过而不让我输入输入?

解析 afterSave 函数被跳过

if 块的第一个条件被跳过

参数化 django 的迁移被跳过(--以编程方式伪造)