2012-03-06 3 views
6

Ben devise'm isteklerimi nasıl yönlendirdiği konusunda biraz kafam karışık, çünkü nedense benim uygulamada oturum açma yoluna gidemiyorum şimdi:Devise/Rails: Hiçbir rota eşleşmiyor [GET] "/ users/sign_out"

devise_for :users, :controllers => {:registrations => "registrations"} 
devise_scope :user do 
    get '/settings' => 'registrations#edit' 
end 

misiniz yanı çalışmaktan benim diğer yolları engellediğini kapsamını tanımlayan:

İşte
ActionController::RoutingError (No route matches [GET] "https://stackoverflow.com/users/sign_out") 

benim kullanıcı modeli ve hazırlamak için ilgili benim yolları gibi bakmak nedir?

Güncelleme

benim bağlantı benziyor gibi, GET istek olması gerekiyor sanmıyorum

:

Bu:

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

Bir DELETE isteği olmalıdır. Devise_for'dan ayrılırsanız ne olur ?: rotalarınızdaki kullanıcılar? – gtr32x

+1

Javascriptiniz hata veriyor mu? Aslında bu bir DELETE http araması yapmak için yapacak olan göze batmayan javascript. –

+0

Sizin Devise yapılandırma dosyanız aşağıdaki öğe için ne yapar? '' 'Config.sign_out_via''' –

cevap

14

. Bazı yorumları ve cevapları burada ve github:

'daki sorunlardan özetlemek için Bu amaçlanan işlevselliktir, RESTful uygulamaların GET isteği ile durumu değiştirmemesi gerekir.

Bunu, @Trip, @fuzzyalej tarafından belirtildiği gibi DELETE yöntemini kullanan bir bağlantı yaparak ve @Joseph Silvashy tarafından yapılan güncelleştirme ile düzeltebilirsiniz. Ben bu konuda rastladım

config.sign_out_via = :delete 

config.sign_out_via = :get 

aşağıdaki ederken

Alternatif (ve daha az önerilir), /config/initializers/devise.rb içinde, aşağıdaki değişiklik yapabilir http://railscasts.com/episodes/209-introducing-devise ile birlikte ve orada kullandığı eski sürümüyle birlikte, bu bir sorun değildi.

+1

Benim için 'application.js' sadece eksikti (railswizard.com'dan 4 şablon rayları) ve şu satırlara ihtiyaç duydu: ' // = jquery // = jquery_ujs' – snowking16

7

Sadece bu nedenle bu mesaj bir cevabı var delete yöntemiyle gönderilmesi gerekir, böylece get

itibaren
0

: Tarayıcınızın adres çubuğuna yazarak veya normalde buna bağlayarak/kullanıcılara/sign_out gitmeye çalışırsanız, bu hatayı alırsınız

link_to("Destroy", "http://www.example.com", :method => :delete, :confirm => "Are you sure?") 
# => <a href='http://www.example.com' rel="nofollow" data-method="delete" data-confirm="Are you sure?">Destroy</a> 
3

Devise denetleyicileri ile SSL kullanıyorsanız ve bir 'http' url'den oturum açmaya çalışıyorsanız, ne oluyor, DELETE isteğini #destroy yöntemine göndermesi, ancak GET aracılığıyla https sürümüne yeniden yönlendirilmesidir.

= link_to "Sign out", destroy_user_session_url(protocol: 'https'), method: :delete 

Not: Sen şöyle linke dışarı işareti https ekleyerek bunu çözebilirsiniz yerine 'yolu'

+0

değişiklikten sonra: Güvenli Bağlantı Başarısız! (Hata kodu: ssl_error_rx_record_too_long) – Dineshkumar

0

Ben aynı sorunu vardı ve bu sürdü çözmek için bir 'URL' olmalıdır adımlar: 1) // = varlıklar/javascripts içinde jquery_ujs/gerektiriyor

yüklemek benim gemfile 3) paket için gem 'jquery-raylar' ekleyin) 2 application.js dahil ... ve işe yaradı.