调用时跳过设计路由

时间:2018-02-10 19:34:25

标签: jquery ruby-on-rails twitter-bootstrap devise routes

我的设计路线工作正常,直到我实现了一个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文件的调用,但仍然是相同的结果。

我现在不知所措,可以真正使用一些帮助。

将橡胶笨拙地放在电脑上然后走开,因为在这个问题中解释它并没有提供解决方案。

1 个答案:

答案 0 :(得分:1)

由于您已经提到过,method: :delete无法使用,您可能已经错过了jquery_ujs rails_ujsapplication.js(有轨道5.1+)。如果没有那么将它添加到那里将使它工作。