Saya telah menginstal alat pada aplikasi saya dan menerapkan hal berikut dalam application.html.erb
file saya :
<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>
Saya berlari rake routes
dan memastikan bahwa semua rute itu valid.
Juga, dalam routes.rb
file saya, saya punya devise_for :users
dan root :to => "home#index"
.
Saya mendapatkan kesalahan perutean berikut saat mengeklik tautan "Keluar":
No route matches "/users/sign_out"
Adakah ide yang menyebabkan kesalahan?
gem 'devise', :git => 'git://github.com/plataformatec/devise.git'
. Tapi itu tidak melakukan apa pun.Jawaban:
Saya pikir rute untuk keluar adalah
DELETE
metode. Ini berarti bahwa tautan keluar Anda harus terlihat seperti ini:Milik Anda tidak termasuk
:method => :delete
bagian. Juga, harap perhatikan bahwa agar ini berfungsi, Anda juga harus memasukkan<%= javascript_include_tag :defaults %>
dalam file tata letak Anda (application.html.erb
).sumber
link_to "Sign out", destroy_user_session_path
selalu cukup baik untukku.$("<a href='/users/sign_out' data-method='delete'>Sign out</a>").appendTo('body');
- jika jQuery dimuat pada halaman.Saya mengubah baris ini di devise.rb:
untuk
dan itu mulai bekerja untuk saya.
sumber
config.sign_out_via = [ :post, :delete ]
ataudevise_for :users, :sign_out_via => [ :post, :delete ]
, seperti yang dijelaskan dalam merancang / rails / routes.rb .Anda mungkin tidak memasukkan file javascript jquery_ujs. Pastikan Anda menggunakan versi terbaru jquery-ujs: https://github.com/rails/jquery-ujs dan file terakhir yang tersedia:
Anda seharusnya tidak memiliki file rails.js lagi. Jika ya, Anda mungkin kedaluwarsa. Pastikan juga file ini dimuat dengan default, di config / application.rb
(Sekali lagi, Anda seharusnya tidak memiliki file rails.js di sini). Terakhir, tambahkan tautan seperti yang didokumentasikan pada Devise wiki (haml-style):
Dan semuanya akan baik-baik saja.
sumber
javascript_include_tag "jquery_ujs"
application.js
. Anggapan yang buruk, saya kira. Terima kasih.Kemampuan untuk membuat tautan Logout sebagai DELETE RESTful call membutuhkan atribut html
data-method = "delete"
dengan menggunakan kode rails= link_to('Logout', destroy_user_session_path, :method => :delete)
.Namun, jika Anda tidak
jquery-ujs
menginstal gem atau tidak memanggil javascript yang dihasilkan di application.html via= javascript_include_tag "application"
, respons akan dikirim sebagai permintaan GET, dan rute akan gagal.Anda memiliki beberapa opsi jika Anda tidak ingin menggunakan
jquery-ujs
atau tidak dapat menemukan cara untuk membuatnya berfungsi:config.sign_out_via
menjadi sama di:get
dalamdevise.rb
(tidak disarankan, karena DELETE adalah permintaan RESTful yang sesuai)link_to
ke= button_to('Logout', destroy_user_session_path, :method => :delete)
. Denganbutton_to
Rails akan melakukan pekerjaan berat untuk membuat panggilan DELETE yang tepat. Anda kemudian dapat menata tombol agar terlihat seperti tautan jika diinginkan.sumber
button_to
, Rails menghasilkan aform
untuk seluruh aksi. Itu sebabnya mungkin menggunakan:delete
metode denganbutton_to
dan tidak denganlink_to
, lihat saja HTML yang dihasilkan.Coba tambahkan rute baru untuk menyusun / sesi # hancurkan dan tautkan ke sana. Misalnya:
melihat:
sumber
link_to
panggilan, seperti yang dijelaskan dalam jawaban lainnya.Gunakan itu di file routes.rb Anda:
sumber
Saya memiliki masalah yang sama dengan rail 3.1.0, dan saya menyelesaikan menambahkan file sebagai berikut:
sumber
Dengan satu pengecualian, jawaban Jessie bekerja untuk saya:
perubahan:
... untuk:
Jadi kode yang berfungsi untuk saya adalah:
sumber
Sudah banyak jawaban untuk pertanyaan itu. Bagi saya masalahnya adalah dua kali lipat:
ketika saya memperluas rute saya:
Saya mendapat peringatan bahwa ini disusutkan sehingga saya menggantinya dengan:
Saya pikir saya akan menghapus jQuery saya. Pilihan yang buruk. Devise menggunakan jQuery untuk "palsu" HAPUS permintaan dan kirim sebagai GET. Karena itu Anda perlu:
dan tentu saja tautan yang sama dengan yang disebutkan sebelumnya:
sumber
Menambahkan:
Gunakan tag link_to ini
Dalam rute tambahkan:
sumber
Opsi lainnya adalah mengonfigurasi logout menjadi GET dan bukannya DELETE, Anda bisa melakukannya dengan menambahkan baris berikut ini
/config/initializers/devise.rb
Tetapi seperti yang ditulis Steve Klabnik di blognya (http://blog.steveklabnik.com/2011/12/12/devise-actioncontroller-routingerror-no-route-matches-get-slash-users-slash-sign-out.html ) coba gunakan HAPUS karena semantik dari metode ini.
sumber
Jika Anda menggunakan Rails 3.1, pastikan application.html.erb Anda keluar seperti:
<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
Dan javascript Anda termasuk baris seperti berikut ini
<%= javascript_include_tag 'application' %>
Dugaan saya adalah bahwa beberapa permata menimpa struktur baru dari lokasi default.js.
sumber
Lihat dengan kode sumber di github:
https://github.com/plataformatec/devise/commit/adb127bb3e3b334cba903db2c21710e8c41c2b40#lib/generators/templates/devise.rb (tanggal: 27 Juni 2011)
sumber
Nah, bagi saya itu hanya menghapus: method =>: delete
sumber
Ini berarti Anda belum membuat file jquery setelah Anda menginstal gem jquery-rails. Jadi pertama-tama Anda harus membuatnya.
rails generate devise:install
Pilihan pertama:
Ini berarti Anda harus mengubah baris berikut
/config/initializers/devise.rb
config.sign_out_via =: delete to config.sign_out_via =: get
Opsi kedua:
Anda hanya mengubah baris ini
<%= link_to "Sign out", destroy_user_session_path %>
menjadi<%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
pada file tampilan.Biasanya
:method => :delete
tidak ditulis secara default.sumber
Saya ingin menambahkan ini meskipun agak lama.
tautan "sign_out" tidak berfungsi, meskipun memiliki: method =>: delete.
Komentar yang menunjukkan bahwa
<%= javascript_include_tag :defaults %>
harus dimasukkan mengingatkan saya, saya baru saja menambahkan skrip java JQuery dan menggunakan<script src=""/>
tag sederhana untuk memasukkan mereka.Ketika saya memindahkan mereka dari setelah: default ke sebelumnya, sign_out mulai bekerja kembali.
Semoga ini bisa membantu seseorang.
sumber
Sebagian besar jawaban sebagian. Saya telah mengenai masalah ini berkali-kali. Dua hal yang perlu diatasi:
metode hapus perlu ditentukan
Kemudian rancang menggunakan jquery, jadi Anda harus memuatnya
dan memastikan bahwa KEDUA jquery dan jquery-ujs ditentukan dalam myDirectiveJSfile.js Anda
sumber
Jangan lupa untuk memasukkan baris berikut di application.js Anda (Rails 3)
Sertakan
jquery_ujs
ke dalam aplikasi rel saya dan berfungsi sekarang.sumber
Jika Anda menggunakan HTTPS dengan alat , itu akan rusak jika tautan keluar Anda ke versi yang tidak aman. Di ujung belakang, itu dialihkan ke versi yang aman. Redirect itu adalah GET, yang menyebabkan masalah.
Pastikan tautan Anda menggunakan HTTPS. Anda dapat memaksanya dengan
protocol: "https"
di helper url Anda (pastikan Anda menggunakan helper url dan bukan helper path).sumber
sumber
Masalahnya dimulai dengan rel 3.1 ...
/app/assets/javascript/
hanya dalam mencari application.js.Jika file tidak ada, buat file dengan nama itu. Saya tidak tahu mengapa file saya hilang atau tidak pernah dibuat
"rails new app"...
.File itu adalah contoh untuk
jquery...
.sumber
Ada banyak solusi di sana. tetapi sebagian besar menggunakan ini,
atau config devise.rb dengan metode sign_out yang tepat
Dalam merancang.rb
sumber
gunakan
:get
dan:delete
metode untuk jalur Anda:sumber
Di route.rb Anda:
dan di application.html.erb Anda:
sumber
Inilah yang saya lakukan (dengan Rails 3.0 dan Rancangan 1.4.2):
sumber
Lihat apakah route.rb Anda memiliki "sumber daya: pengguna" sebelum "devise_for: users" lalu coba menukar mereka:
Bekerja
Gagal
sumber
halaman
':method => :delete
'in is'data-method="delete"
'sehingga halaman Anda harus memiliki jquery_ujs.js, itu akan mengirimkan tautan dengan metode delete not method getsumber
Saya tahu ini adalah pertanyaan lama berdasarkan Rails 3 tapi saya hanya berlari dan menyelesaikannya di Rails 4.0.4. Jadi saya pikir saya akan membahas bagaimana saya memperbaikinya bagi siapa saja yang mengalami masalah dengan versi ini. Jarak tempuh Anda mungkin beragam, tetapi inilah yang bekerja untuk saya.
Pertama-tama pastikan Anda telah menginstal permata dan menjalankan bundle install.
Di application.js periksa apakah semuanya diperlukan seperti di bawah ini.
Waspadalah jika ini gotcha : ini
//= require jquery.turbolinks
dan tidak//= require jquery-turbolinks
Selanjutnya, tambahkan tautan yang sesuai di header application.html.erb.
Tampaknya ada banyak variasi tentang bagaimana menerapkan metode hapus yang saya asumsikan tergantung pada versi Rails yang Anda gunakan. Ini adalah
delete
sintaks yang saya gunakan.Harapan yang membantu menggali seseorang keluar dari lubang yang sangat membuat frustrasi ini!
sumber
Secara umum ketika Anda mendapatkan "Tidak ada rute yang cocok" tetapi Anda pikir Anda memiliki rute yang ditentukan kemudian periksa kembali kata kerja http / metode permintaan (apakah itu mendapatkan, menempatkan, memposting, menghapus dll) untuk rute itu .
Jika Anda menjalankan rute rake maka Anda akan melihat metode yang diharapkan dan Anda dapat membandingkan ini dengan log permintaan.
sumber