Zainstalowałem devise w mojej aplikacji i zastosowałem w swoim application.html.erb
pliku:
<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>
Pobiegłem rake routes
i potwierdziłem, że wszystkie trasy są prawidłowe.
Ponadto w moim routes.rb
pliku mam devise_for :users
i root :to => "home#index"
.
Po kliknięciu linku „Wyloguj” pojawia się następujący błąd routingu:
No route matches "/users/sign_out"
Wszelkie pomysły, co powoduje błąd?
gem 'devise', :git => 'git://github.com/plataformatec/devise.git'
. To jednak nic nie pomogło.Odpowiedzi:
Myślę, że droga do wylogowania się jest
DELETE
metodą. Oznacza to, że link do wylogowania musi wyglądać następująco:Twój nie obejmuje
:method => :delete
części. Pamiętaj również, że aby to zadziałało, musisz również dołączyć<%= javascript_include_tag :defaults %>
do pliku układu (application.html.erb
).źródło
link_to "Sign out", destroy_user_session_path
zawsze było dla mnie wystarczająco dobre.$("<a href='/users/sign_out' data-method='delete'>Sign out</a>").appendTo('body');
- jeśli jQuery jest załadowane na stronie.Zmieniłem tę linię w devise.rb:
do
i zaczęło to działać dla mnie.
źródło
config.sign_out_via = [ :post, :delete ]
lubdevise_for :users, :sign_out_via => [ :post, :delete ]
, jak opisano w devise / rails / route.rb .Prawdopodobnie nie dodałeś pliku javascript jquery_ujs. Upewnij się, że używasz najnowszej wersji jquery-ujs: https://github.com/rails/jquery-ujs i ostatnich dostępnych plików:
Należy nie mamy żadnych dodatkowych plików rails.js. Jeśli to zrobisz, prawdopodobnie jesteś nieaktualny. Upewnij się, że również ten plik jest załadowany z wartościami domyślnymi, w config / application.rb
(Ponownie, to powinno nie mieć plik rails.js tutaj). Na koniec dodaj link zgodnie z dokumentacją na Devise wiki (w stylu haml):
I wszystko będzie dobrze.
źródło
javascript_include_tag "jquery_ujs"
application.js
. Złe przypuszczenie. Dzięki.Możliwość ustawienia połączenia Wyloguj jako USUNIĘCIA wywołania RESTful wymaga atrybutu HTML
data-method = "delete"
za pomocą kodu szyny= link_to('Logout', destroy_user_session_path, :method => :delete)
.Jeśli jednak nie masz
jquery-ujs
zainstalowanego klejnotu lub nie wywołujesz wynikowego javascript w= javascript_include_tag "application"
pliku application.html przez , odpowiedź zostanie wysłana jako żądanie GET, a trasa się nie powiedzie.Masz kilka opcji, jeśli nie chcesz używać
jquery-ujs
lub nie możesz znaleźć sposobu, aby to zadziałało:config.sign_out_via
na równe:get
w obrębiedevise.rb
(niezalecane, ponieważ DELETE jest odpowiednim zapytaniem RESTful)link_to
do= button_to('Logout', destroy_user_session_path, :method => :delete)
. Zbutton_to
szynami wykona ciężkie podnoszenie po prawidłowym wywołaniu DELETE. Następnie możesz stylizować przycisk, aby wyglądał jak link, jeśli chcesz.źródło
button_to
, Railsy generująform
dla całej akcji. Dlatego możliwe jest użycie:delete
metody zibutton_to
bezlink_to
, po prostu zobacz wygenerowany HTML.Spróbuj dodać nową trasę do opracowania / sesji # zniszczyć i link do niej. Na przykład:
widok:
źródło
link_to
wywołania, jak opisano w drugiej odpowiedzi.Użyj go w pliku route.rb:
źródło
Miałem ten sam problem z szynami 3.1.0 i rozwiązałem dodawanie w pliku następujących wierszy:
źródło
Z jednym wyjątkiem odpowiedź Jessie zadziałała dla mnie:
zmiana:
... do:
Więc kod, który zadziałał dla mnie to:
źródło
Wiele odpowiedzi na pytanie już. Dla mnie problem był dwojaki:
kiedy rozwijam swoje trasy:
Ostrzegałem mnie, że jest to amortyzowane, więc zastąpiłem go:
Myślałem, że usunę moje jQuery. Zły wybór. Devise używa jQuery do „sfałszowania” żądania DELETE i wysłania go jako GET. Dlatego musisz:
i oczywiście ten sam link, jak wiele wcześniej wspomnianych:
źródło
Dodaj:
Użyj tych tagów link_to
W trasach dodaj:
źródło
Inną opcją jest skonfigurowanie wylogowania jako GET zamiast DELETE, możesz to zrobić, dodając następujący wiersz
/config/initializers/devise.rb
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 z powodu semantyki tej metody.
źródło
Jeśli używasz Rails 3.1, upewnij się, że wylogowanie application.html.erb wygląda następująco:
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
I że Twój wiersz JavaScript zawiera następujący wygląd
<%= javascript_include_tag 'application' %>
Domyślam się, że niektóre klejnoty nadpisują nową strukturę domyślnej lokalizacji.js.
źródło
Sprawdź to za pomocą kodu źródłowego w github:
https://github.com/plataformatec/devise/commit/adb127bb3e3b334cba903db2c21710e8c41c2b40#lib/generators/templates/devise.rb (data: 27 czerwca 2011 r.)
źródło
Cóż, chłopaki dla mnie to było tylko usunięcie: method =>: delete
źródło
Oznacza to, że nie wygenerowałeś plików jquery po zainstalowaniu klejnotu jquery-rails. Najpierw musisz go wygenerować.
rails generate devise:install
Pierwsza opcja:
Oznacza to, że musisz zmienić następujący wiersz
/config/initializers/devise.rb
config.sign_out_via =: usuń do config.sign_out_via =: get
Druga opcja:
Zmieniasz tylko ten wiersz
<%= link_to "Sign out", destroy_user_session_path %>
na<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
plik widoku.Zwykle
:method => :delete
nie jest napisane domyślnie.źródło
Chcę to dodać, choć jest trochę stary.
link „sign_out” nie działał, mimo że: method =>: delete.
Komentarz wskazujący, że
<%= javascript_include_tag :defaults %>
należy to uwzględnić przypomniał mi, że niedawno dodałem skrypt JQuery Java i użyłem prostego<script src=""/>
tagów, aby je uwzględnić.Kiedy przeniosłem je z: domyślnie na wcześniej, wylogowanie znów zaczęło działać.
Mam nadzieję, że to komuś pomaga.
źródło
Większość odpowiedzi jest częściowa. Dotknąłem tego problemu wiele razy. Należy zająć się dwiema kwestiami:
należy usunąć metodę usuwania
Następnie wymyśl użycie jquery, więc musisz je załadować
i upewnij się, że ZARÓWNO jquery i jquery-ujs są określone w pliku myDirectiveJSfile.js
źródło
Nie zapomnij dołączyć następującego wiersza do pliku application.js (Rails 3)
Dołącz
jquery_ujs
do mojej aplikacji railsowej i działa teraz.źródło
Jeśli używasz HTTPS z devise , zepsuje się , jeśli link do wylogowania jest w niezabezpieczonej wersji. Z tyłu przekierowuje do bezpiecznej wersji. Przekierowanie to GET, które powoduje problem.
Upewnij się, że Twój link używa HTTPS. Możesz wymusić to
protocol: "https"
w pomocniku url (upewnij się, że używasz pomocnika url, a nie pomocnika ścieżki).źródło
źródło
Problem zaczyna się od szyn 3.1.
/app/assets/javascript/
Wystarczy poszukać application.js.Jeśli plik nie istnieje, utwórz plik o tej nazwie, nie wiem, dlaczego mój plik zniknął lub nigdy nie został utworzony
"rails new app"...
.Ten plik jest instancją dla
jquery...
.źródło
Istnieje wiele rozwiązań. ale najczęściej używają tego,
lub config devise.rb z odpowiednią metodą sign_out
W devise.rb
źródło
użyj
:get
i:delete
metody na swojej ścieżce:źródło
W twoich trasach.rb:
oraz w application.html.erb:
źródło
Oto co zrobiłem (z Railsami 3.0 i Devise 1.4.2):
źródło
Sprawdź, czy twoja route.rb ma „zasób: użytkownicy” przed „devise_for: users”, a następnie spróbuj je zamienić:
Pracuje
Zawodzi
źródło
':method => :delete
„na stronie”data-method="delete"
'więc Twoja strona musi mieć jquery_ujs.js, złoży odnośnik metodą metoda usuwania nie daćźródło
Wiem, że to stare pytanie oparte na Railsach 3, ale właśnie natknąłem się i rozwiązałem je w Railsach 4.0.4. Pomyślałem więc, że poprawię sposób, w jaki naprawiłem to dla każdego, kto napotka ten problem w tej wersji. 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 instalację pakietu.
W application.js sprawdź, czy wszystko jest wymagane, jak poniżej.
Uważaj, jeśli to masz : to
//= require jquery.turbolinks
i nie//= require jquery-turbolinks
Następnie dodaj odpowiednie linki w nagłówku application.html.erb.
Wydaje się, że istnieje wiele odmian sposobu implementacji metody usuwania, która, jak zakładam, zależy od używanej wersji Railsów. To jest
delete
składnia, której użyłem.Mam nadzieję, że pomożesz wykopać kogoś z tej bardzo frustrującej dziury!
źródło
Zasadniczo, gdy pojawi się komunikat „Brak pasujących tras”, ale wydaje się, że zdefiniowano tę trasę, należy dwukrotnie sprawdzić metodę czasownika / żądania http (czy jest to get, put, post, delete itd.) Dla tej trasy .
Jeśli uruchomisz trasy prowizji, zobaczysz oczekiwaną metodę i możesz ją porównać z dziennikiem żądań.
źródło