Saya memiliki halaman yang mencantumkan semua proyek yang memiliki header dan pagination yang dapat diurutkan.
path:
/projects?order=asc&page=3&sort=code
Saya memilih untuk mengedit salah satu proyek
path:
projects/436/edit
Ketika saya mengklik simpan di halaman itu, ia memanggil metode pengontrol / pembaruan proyek. Setelah saya memperbarui kode saya ingin mengarahkan ulang ke jalur yang saya gunakan sebelum saya mengklik edit proyek tertentu. Dengan kata lain, saya ingin berada di halaman yang sama dengan pengurutan yang sama.
Saya melihat link_to (: kembali) dan berpikir: kembali dapat bekerja di redirect_to (: kembali), tapi itu tidak jalan.
puts YAML::dump(:back)
yields the following:
:back
Ada ide tentang bagaimana saya bisa membuatnya bekerja. Sepertinya masalah yang akan mudah dipecahkan, tapi saya baru mengenal RoR.
sumber
redirect_to session.delete(:return_to)
dalam tindakan pembaruan. Ini membersihkan nilai dari sesi, karena tidak diperlukan lagi.redirect_to request.referer
?request.referer.referer
, jika itu mungkin. @Jaime Bellmyer Kenapa||=
?Mengapa
redirect_to(:back)
tidak bekerja untuk Anda, mengapa itu tidak jalan?redirect_to(:back)
bekerja seperti pesona bagi saya. Itu hanya jalan pintasredirect_to(request.env['HTTP_REFERER'])
http://apidock.com/rails/ActionController/Base/redirect_to (pre Rails 3) atau http://apidock.com/rails/ActionController/Redirecting/redirect_to (Rails 3)
Harap dicatat bahwa
redirect_to(:back)
sedang tidak digunakan lagi dalam Rails 5. Anda dapat menggunakanredirect_back(fallback_location: 'something')
sebagai gantinya (lihat http://blog.bigbinary.com/2016/02/29/rails-5-improves-redirect_to_back-with-redirect-back.html )sumber
redirect_to :back
tidak berfungsi dengan baik untuk saya, katakan Anda mengunjungi/posts/new
, ini ditetapkan sebagai perujuk untuk permintaan berikutnya, jadi setelah formulir berhasil dikirim itu menunjukkan formulir lagi, yaitu/posts/new
. Namun itu berfungsi dengan baik untuk tujuan lain.redirect_to projects_path
.HTTP_REFERER
tidak diatur, Anda mungkin mendapatkanActionController::RedirectBackError
, Anda harus menyelamatkan dari pengecualian ini dalam kasus itu. Dari pemahaman saya, menggunakanredirect_back
tidak memerlukan penanganan pengecualian karena Anda dipaksa untuk menyediakanfallback_location
. Mungkin 'tidak berfungsi dengan baik' bukan cara yang tepat untuk mengatakannya.Saya suka metode Jaime dengan satu pengecualian, itu bekerja lebih baik bagi saya untuk menyimpan kembali referensi setiap kali:
Alasannya adalah bahwa jika Anda mengedit beberapa objek, Anda akan selalu diarahkan kembali ke URL pertama yang Anda simpan dalam sesi dengan metode Jaime. Sebagai contoh, katakanlah saya memiliki objek Apple dan Orange. Saya mengedit Apple dan
session[:return_to]
siap untuk referensi tindakan itu. Ketika saya pergi untuk mengedit Jeruk menggunakan kode yang sama,session[:return_to]
tidak akan ditetapkan karena sudah ditentukan. Jadi ketika saya memperbarui Orange, saya akan dikirim ke referer dari tindakan edit # Apple sebelumnya.sumber
Ini adalah bagaimana kami melakukannya di aplikasi kami
Dengan cara ini Anda hanya menyimpan permintaan GET terakhir di
:return_to
param sesi, jadi semua formulir, bahkan ketika beberapa waktu POST akan berfungsi:return_to
.sumber
request.request_uri
tidak lagi tersedia, jadi saya sarankan untuk menggunakanrequest.fullpath
sebagai gantinyaand
danor
dalamif
pernyataan. Gunakan&&
dan||
sebagai gantinya. Detail di sini .Di rel 5, sesuai instruksi dalam Panduan Rails, Anda dapat menggunakan:
Lokasi 'kembali' ditarik dari tajuk HTTP_REFERER yang tidak dijamin disetel oleh peramban. Itulah mengapa Anda harus menyediakan 'fallback_location'.
sumber
notice
objek denganredirect_back
pernyataan untuk memberi tahu pengguna ada yang salah dengan pesan flash?redirect_back(fallback_location: root_path, notice: "Something went wrong!")
. Semoga ini bisa membantu.request.referer
diatur oleh Rack dan diatur sebagai berikut:Lakukan saja
redirect_to request.referer
dan itu akan selalu mengarahkan ke halaman referensi yang sebenarnya, atau root_path ('/'). Ini penting ketika melewati tes yang gagal dalam kasus direct-nav ke halaman tertentu di mana controller melempar redirect_to: kembalisumber
referer
didefinisikan pada 28 Mar 2011 , dan itulah yang didefinisikan pada hari ini . Artinya,|| '/'
bukan bagian dari definisi.Bagi mereka yang tertarik, ini adalah implementasi saya untuk memperluas jawaban asli MBO (ditulis pada rail 4.2.4, ruby 2.1.5).
sumber