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? 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
).
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.
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.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:
- Zmień
config.sign_out_via
na równe:get
wewnątrzdevise.rb
(nie zaleca się, ponieważ DELETE jest odpowiednim zapytaniem RESTful) - lub zmienić
link_to
na= button_to('Logout', destroy_user_session_path, :method => :delete)
. Zbutton_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.
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 %>
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
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
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' %>
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:
-
Kiedy poszerzam swoje trasy:
devise_for :users do get '/users/sign_out' => 'devise/sessions#destroy' end
-
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
-
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
-
I oczywiście ten sam link, co wielu wymienionych wcześniej:
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
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
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.
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.
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
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) %>
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.
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.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.
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
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 %>
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
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 %>
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):
- Upewnij się, że Twoja strona ładuje rails.js
- Użyj tego param: 'data-method' = > 'delete'
- dobry pomysł, aby dodać ten param:: rel = > 'nofollow'
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
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...
.
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.)
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
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ć:
-
Działa
- devise_for: użytkownicy
- zasoby: użytkownicy
-
Fails
- zasoby: użytkownicy
- devise_for: użytkownicy
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ń.
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!
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