Разработать проблему маршрутов в Rails 3.1 с отсутствием совпадений маршрутов [GET] "/ users / sign_out" - PullRequest
1 голос
/ 12 ноября 2011

Я использую гем аутентификации Devise 1.4.9 с моим приложением Rails 3.1, и когда я нажимаю на любую ссылку, я получаю ошибки маршрутизации. Вот что происходит, когда я нажимаю на ссылку «Выйти»:

Routing Error

No route matches [GET] "/users/sign_out"

Я создаю ссылку этим методом:

<%= link_to('Sign Out', destroy_user_session_path, :method => :delete) %>

Вот как ссылка отображается в источнике:

<a href="/users/sign_out" data-method="delete" rel="nofollow">Sign Out</a>

У меня есть эта строка в заголовке моего макета:

<%= javascript_include_tag :defaults %>

Эти строки находятся в моем файле application.js:

//
// = require jquery
// = require jquery_ujs
// = require_tree .

Вот соответствующие выходные данные рейк-маршрутов:

          new_user_session GET        /users/sign_in(.:format)                  {:action=>"new", :controller=>"devise/sessions"}
              user_session POST       /users/sign_in(.:format)                  {:action=>"create", :controller=>"devise/sessions"}
      destroy_user_session DELETE     /users/sign_out(.:format)                 {:action=>"destroy", :controller=>"devise/sessions"}
             user_password POST       /users/password(.:format)                 {:action=>"create", :controller=>"devise/passwords"}
         new_user_password GET        /users/password/new(.:format)             {:action=>"new", :controller=>"devise/passwords"}
        edit_user_password GET        /users/password/edit(.:format)            {:action=>"edit", :controller=>"devise/passwords"}
                           PUT        /users/password(.:format)                 {:action=>"update", :controller=>"devise/passwords"}
  cancel_user_registration GET        /users/cancel(.:format)                   {:action=>"cancel", :controller=>"devise/registrations"}
         user_registration POST       /users(.:format)                          {:action=>"create", :controller=>"devise/registrations"}
     new_user_registration GET        /users/sign_up(.:format)                  {:action=>"new", :controller=>"devise/registrations"}
    edit_user_registration GET        /users/edit(.:format)                     {:action=>"edit", :controller=>"devise/registrations"}
                           PUT        /users(.:format)                          {:action=>"update", :controller=>"devise/registrations"}
                           DELETE     /users(.:format)                          {:action=>"destroy", :controller=>"devise/registrations"}

Я пробовал почти все в этой теме, но безрезультатно:

Нет подходящих маршрутов "/ users / sign_out" devise rails 3

Я перезагружал сервер много раз.

Эта проблема, похоже, возникла в прошлом, но ни одно из описанных решений не изменило это поведение, и я в замешательстве.

Ответы [ 3 ]

0 голосов
/ 13 ноября 2011

Пожалуйста, попробуйте переименовать :defaults в :application при передаче его в javascript_include_tag, если вы определяете свои включения в application.js

<%= javascript_include_tag :application %>
0 голосов
/ 03 сентября 2016

Письмо

devise_scope :user do 
  get "/users/sign_out", :to => "devise/sessions#destroy" 
  end 

по моему routes.rb решил проблему за меня.

0 голосов
/ 13 ноября 2011

Во-первых, вы можете использовать кнопку (может выглядеть как ссылка) для чего-то разрушительного, согласно этому контрольному списку для использования GET.Это само по себе может это исправить.

Два, вам нужен csrf_meta_tag в файле, который у вас, вероятно, уже есть.

Вы подтвердили, что файлы JS действительно загружаются?

(я думал, что // = с пробелом может быть проблемой, но, очевидно, он работает так же, как //=, как Rails создает по умолчанию.)

...