No route matches "/ users / Wyloguj się " devise rails 3

Zainstalowałem devise w mojej aplikacji i zastosowałem następujący plik application.html.erb:

<div id="user_nav">
    <% if user_signed_in? %>
        Signed in as <%= current_user.email %>. This cannot be cheese?
        <%= link_to 'Sign out', destroy_user_session_path %>
    <% else %>
        <%= link_to 'Register', new_user_registration_path %> or <%= link_to 'Sign in', new_user_session_path %>
    <% end %>
</div>

Biegłem rake routes i potwierdziłem, że wszystkie trasy są ważne.

Również w moim routes.rb pliku Mam devise_for :users i root :to => "home#index".

Po kliknięciu linku "Wyloguj się" pojawia się następujący błąd trasowania:

No route matches "/users/sign_out"
Jakieś pomysły, co jest przyczyną błędu?
Author: vich, 2011-07-02

29 answers

Myślę, że droga do wylogowania jest metodą DELETE. Oznacza to, że twój link do wylogowania musi wyglądać tak:

<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>

Twój nie zawiera :method => :delete części. Należy również pamiętać, że aby to zadziałało, należy również umieścić <%= javascript_include_tag :defaults %> w pliku układu (application.html.erb).

 559
Author: Jessie Dedecker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-12 04:19:06

Zmieniłem tę linię w devise.rb:

config.sign_out_via = :delete

Do

config.sign_out_via = :get

I zaczęło działać dla mnie.

 130
Author: kitdesai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-12 04:31:26

Prawdopodobnie nie włączyłeś pliku javascript jquery_ujs. Upewnij się, że używasz najnowszej wersji jquery-ujs: https://github.com/rails/jquery-ujs i ostatnie dostępne pliki:

rails generate jquery:install

Powinieneś Nie mieć więcej szyn.plik js. Jeśli tak, to pewnie jesteś Nieaktualny. Upewnij się, że ten plik jest załadowany z domyślnymi wartościami, w config / application.rb

config.action_view.javascript_expansions[:defaults] = %w(jquery.min jquery_ujs)

(Ponownie, powinieneś Nie mieć rails.plik js tutaj). Na koniec dodaj link zgodnie z dokumentacją na Devise wiki (haml-style):

= link_to('Logout', destroy_user_session_path, :method => 'delete')
I wszystko będzie dobrze.
 58
Author: Gravis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-23 13:38:44

Możliwość uczynienia linku wylogowania delete RESTful call wymaga atrybutu html data-method = "delete" przy użyciu kodu rails = link_to('Logout', destroy_user_session_path, :method => :delete).

Jeśli jednak nie masz zainstalowanego gem jquery-ujs lub nie wywołujesz wynikowego javascript w swojej aplikacji.html poprzez = javascript_include_tag "application", odpowiedź zostanie wysłana jako żądanie GET, a trasa zakończy się niepowodzeniem.

Masz kilka opcji, jeśli nie chcesz używać jquery-ujs lub nie możesz znaleźć sposobu, aby to działało:

  1. Zmień config.sign_out_via na równe :get wewnątrz devise.rb (nie zaleca się, ponieważ DELETE jest odpowiednim zapytaniem RESTful)
  2. lub zmienić link_to na = button_to('Logout', destroy_user_session_path, :method => :delete). Z button_to Rails wykona ciężkie podnoszenie przy wykonywaniu właściwego połączenia DELETE. Następnie możesz stylować przycisk, aby wyglądał jak link, jeśli chcesz.
 31
Author: Will Nathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-30 20:11:50

Spróbuj dodać nową trasę do devise / sessions#destroy i połączyć się z nią. Eg:

routes.rb
devise_for :users do
  get 'logout' => 'devise/sessions#destroy'
end

Widok:

<%= link_to "Logout", logout_path %>
 24
Author: Kevin Tsoi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-12 20:43:48

Miałem ten sam problem z rails 3.1.0 i rozwiązałem dodawanie do pliku następujących linii:

app/assets/javascripts/application.js
//= require_tree
//= require jquery
//= require jquery_ujs
 13
Author: gringo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-01 22:27:39

Użyj go na swoich trasach.plik rb:

devise_for :users do
    get '/users/sign_out' => 'devise/sessions#destroy'
end
 13
Author: Uma Maheswararao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-30 08:38:59

Z jednym wyjątkiem, odpowiedź Jessie zadziałała dla mnie:

<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>

Zmiana:

:delete

... do:

'delete'

Więc kod, który działał dla mnie to:

<%= link_to "Sign out", destroy_user_session_path, :method => 'delete' %>
 10
Author: Galen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-14 04:43:09

Już wiele odpowiedzi na to pytanie. Dla mnie problem był dwa razy:

  1. Kiedy poszerzam swoje trasy:

    devise_for :users do 
       get '/users/sign_out' => 'devise/sessions#destroy'
    end
    
  2. Otrzymałem ostrzeżenie, że to jest amortyzowane, więc zamieniłem na:

    devise_scope :users do
       get '/users/sign_out' => 'devise/sessions#destroy'
    end
    
  3. Myślałem, że usunę moje jQuery. Zły wybór. Devise używa jQuery do "fałszywego" żądania usunięcia i wysłania go jako GET. Dlatego musisz:

    //= require jquery
    //= require jquery_ujs
    
  4. I oczywiście ten sam link, co wielu wymienionych wcześniej:

    <%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
    
 8
Author: Lukasz Muzyka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-22 14:10:05

Dodaj:

  <%= csrf_meta_tag %>  and 
  <%= javascript_include_tag :defaults %>  to layouts

Użyj tych tagów link_to

 link_to 'Sign out', destroy_user_session_path, :method => :delete

  or

 link_to 'Sign out', '/users/sign_out', :method => :delete

W trasach dodaj:

  devise_for :users do
    get '/users/sign_out' => 'devise/sessions#destroy'
  end
 7
Author: Amal Kumar S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-18 11:54:26

Inną opcją jest skonfigurowanie wylogowania jako GET zamiast DELETE, możesz to zrobić dodając następującą linię na /config/initializers/devise.rb

config.sign_out_via = :get

Ale jak napisał Steve Klabnik na swoim blogu (http://blog.steveklabnik.com/2011/12/11/devise-actioncontroller-routingerror-no-route-matches-get-slash-users-slash-sign-out.html) spróbuj użyć DELETE ze względu na semantykę tej metody.

 7
Author: Rodrigo Flores,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-17 20:32:58

Jeśli używasz Rails 3.1 upewnij się, że Twoja aplikacja.html.erb Wyloguj się wygląda tak:

<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>

I że Twój javascript zawiera wiersz wygląda następująco

<%= javascript_include_tag 'application' %>

Domyślam się, że niektóre klejnoty nadpisują nową strukturę domyślną.miejsce w js.

 6
Author: StlTenny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-06 02:42:11

Sprawdź to z kodem źródłowym w github:

Https://github.com/plataformatec/devise/commit/adb127bb3e3b334cba903db2c21710e8c41c2b40#lib/generators/templates/devise.rb (Data: 27 czerwca 2011)

  • # domyślna metoda HTTP używana do wylogowania zasobu. Domyślnie jest to: get. 188
  • # config.sign_out_via =: get 187
  • # domyślna metoda HTTP używana do wylogowania zasobu. Domyślnie jest to: delete. 188
  • config.sign_out_via = : delete
 5
Author: Shane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-16 17:12:46

No, chłopaki dla mnie to było tylko usunąć: method =>: delete

<%= link_to('Sign out', destroy_user_session_path) %>
 5
Author: workdreamer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-01 20:20:50

Oznacza to, że nie wygenerowałeś plików jquery po zainstalowaniu klejnotu jquery-rails. Więc najpierw musisz go wygenerować.

rails generate devise:install

Pierwsza Opcja:

Oznacza to, że albo musisz zmienić następujący wiersz na /config/initializers/devise.rb

Config.sign_out_via =: delete to config.sign_out_via =: get

Druga Opcja:

Zmieniasz tylko tę linię <%= link_to "Sign out", destroy_user_session_path %> na <%= link_to "Sign out", destroy_user_session_path, :method => :delete %> w pliku widoku.

Zazwyczaj :method => :delete nie jest zapisywane domyślnie.

 5
Author: Deepak Lamichhane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-20 20:03:41

[2]}chcę dodać do tego, mimo że jest trochę stary.

Link "sign_out" nie działał, pomimo posiadania :method => :delete.

Komentarz wskazujący, że <%= javascript_include_tag :defaults %> musi być dołączony przypomniał mi, że niedawno dodałem JQuery java script i użyłem prostych tagów <script src=""/> do ich umieszczenia.

Kiedy przeniosłem je z after the: defaults do before, sign_out zaczął działać ponownie.

Mam nadzieję, że to komuś pomoże.
 5
Author: Greg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-22 05:12:27

Nie zapomnij dołączyć poniższej linii w aplikacji.js (Rails 3)

//= require_self
//= require jquery
//= require jquery_ujs

Dołącz jquery_ujs do mojej aplikacji rails i działa teraz.

 4
Author: The Lazy Log,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-12 08:26:43

Większość odpowiedzi jest częściowa. Trafiłem na ten problem wiele razy. Należy zająć się dwiema rzeczami:

<%= link_to(t('logout'), destroy_user_session_path, :method => :delete) %>

Należy podać metodę delete

Następnie devise używa jquery, więc musisz załadować te

   <%= javascript_include_tag "myDirectiveJSfile" %> 

I upewnij się, że zarówno jquery, jak i jQuery-ujs są podane w pliku myDirectiveJSfile.js

//= require jquery
//= require jquery_ujs
 3
Author: Jerome,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-05 08:14:24

Jeśli używasz HTTPS z devise , pęknie, jeśli link do wylogowania jest w niezabezpieczonej wersji. Z tyłu przekierowuje do bezpiecznej wersji. To przekierowanie jest GET, co powoduje problem.

Upewnij się, że link używa HTTPS. Możesz wymusić to za pomocą protocol: "https" w helperze url (upewnij się, że używasz helpera url, a nie pomocnika ścieżki).

<%= link_to "Sign out", destroy_user_session_url(protocol: "https"), method: :delete %>
 3
Author: Tyler Collier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-23 23:09:51
  devise_for :users
  devise_scope :user do
    get '/users/sign_out' => 'devise/sessions#destroy'
  end
 3
Author: dipole_moment,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-12 17:10:53

Na Twoich trasach.rb:

 devise_for :users do
    get '/sign_out' => 'devise/sessions#destroy'
    get '/log_in' => 'devise/sessions#new'
    get '/log_out' => 'devise/sessions#destroy'
    get '/sign_up' => 'devise/registrations#new'
    get '/edit_profile' => 'devise/registrations#edit'
 end

I w twoim zgłoszeniu.html.erb:

<%if user_signed_in?%>
          <li><%= link_to "Sign_out", sign_out_path %></li>
<% end %>
 2
Author: Uladzimir Khadakouski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-29 10:02:16

Tak zrobiłem (z Rails 3.0 i Devise 1.4.2):

  1. Upewnij się, że Twoja strona ładuje rails.js
  2. Użyj tego param: 'data-method' = > 'delete'
  3. dobry pomysł, aby dodać ten param:: rel = > 'nofollow'
 2
Author: Larry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-13 00:53:44

':method => :delete ' na stronie jest 'data-method="delete"' więc Twoja strona musi mieć jquery_ujs.js, prześle link z metodą delete a nie metodą get

 2
Author: user1599712,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-25 07:21:16

Problem zaczyna się od rails 3.1... w /app/assets/javascript/ wystarczy poszukać aplikacji.js.

Jeśli plik nie istnieje utwórz plik o tej nazwie Nie wiem dlaczego mój plik zniknął lub nigdy nie został utworzony na "rails new app"....

Ten plik jest instancją jquery....

 2
Author: rome3ro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-25 07:50:24

Istnieje wiele rozwiązań. ale głównie używaj tego,

<%= link_to 'Sign out', destroy_user_session_path, method: :delete %>

Lub Config devise.rb z właściwą metodą sign_out

W devise.rb

config.sign_out_via = :delete ( or  :get which u like to use.) 
 2
Author: jon snow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-24 15:12:35

Użyj metody :get i :delete dla swojej ścieżki:

devise_scope :user do
  match '/users/sign_out' => 'devise/sessions#destroy', :as => :destroy_user_session, via: [:get, :delete]
end
 2
Author: Zakaria,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-19 14:53:10

Sprawdź, czy Twoje trasy.rb ma "resource: users "przed" devise_for: users", a następnie spróbuj je zamienić:

  1. Działa

    • devise_for: użytkownicy
    • zasoby: użytkownicy
  2. Fails

    • zasoby: użytkownicy
    • devise_for: użytkownicy
 1
Author: Charles Magid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-24 00:20:18

W ogóle, gdy dostajesz "brak dopasowania trasy", ale myślisz, że masz tę trasę zdefiniowaną, to Sprawdź dwukrotnie metodę HTTP verb / request (czy jej get, put, post, delete itp.) dla tej trasy .

Jeśli uruchomisz trasy prowizji, zobaczysz oczekiwaną metodę i możesz porównać ją z dziennikiem żądań.

 1
Author: Muntasim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-09 07:49:19

Wiem, że to stare pytanie oparte na Rails 3, ale właśnie wpadłem i rozwiązałem je na Rails 4.0.4. Więc pomyślałem, że rzucę się na to, jak go naprawiłem dla każdego, kto napotyka ten problem z tą wersją. Twój przebieg może się różnić, ale oto, co zadziałało dla mnie.

Najpierw upewnij się, że masz zainstalowane klejnoty i uruchom bundle install.

gem 'jquery-rails'

gem 'turbolinks'

gem 'jquery-turbolinks'

W aplikacji.js sprawdź, czy wszystko jest wymagane, jak poniżej.

Strzeż się, jeśli to jest : to jest //= require jquery.turbolinks i nie //= require jquery-turbolinks

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

Następnie dodaj odpowiednie linki w nagłówku aplikacji.html.erb.

<%= javascript_include_tag  "application", "data-turbolinks-track" => true %>
<%= javascript_include_tag :defaults %>

Wydaje się, że istnieje wiele wariantów implementacji metody delete, która, jak zakładam, zależy od wersji Rails, której używasz. To jest składnia delete, której użyłem.

<p><%= link_to "Sign Out", destroy_user_session_path, :method => 'delete' %></p>

Mam nadzieję, że to pomoże wykopać kogoś z tej frustrującej dziury!

 0
Author: mikeym,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-04 04:55:51