Saya perlu tahu rute saat ini dalam filter di Rails. Bagaimana saya bisa mengetahui apa itu?
Saya sedang melakukan sumber daya REST, dan tidak melihat rute bernama.
ruby-on-rails
ruby
routing
luca
sumber
sumber
Jawaban:
Untuk mengetahui URI:
Untuk mengetahui rute yaitu pengontrol, aksi dan params:
sumber
params[:controller]
danparams[:action]
. Namun, di luar itu, jika Anda ingin mengenali rute, API ini tidak tersedia lagi. Sekarang telah bergeser keActionDispatch::Routing
dan saya belum mencobanyarecognize_path
.request.path
untuk menemukan jalur saat ini.request.env['ORIGINAL_FULLPATH']
untuk memasukkan parameter yang mungkin di jalur, lihat jawaban saya di bawah ini.Jika Anda mencoba membuat kasus khusus sesuatu dalam tampilan, Anda dapat menggunakan
current_page?
seperti pada:... atau tindakan dan id ...
... atau rute bernama ...
...dan
Karena
current_page?
membutuhkan pengontrol dan aksi, saat saya peduli hanya pengontrolnya, saya membuatcurrent_controller?
metode di ApplicationController:Dan gunakan seperti ini:
... yang juga berfungsi dengan beberapa nama pengontrol ...
sumber
controller_name
danaction_name
baik untuk digunakan dalam pembantu dan pandangan untuk hal semacam ini juga.Solusi paling sederhana yang dapat saya buat pada tahun 2015 (diverifikasi menggunakan Rails 4, tetapi juga harus bekerja menggunakan Rails 3)
sumber
<form action="<%= request.path %>">
Kamu bisa melakukan ini
Ini bekerja untuk saya di rel 3.1.0.rc4
sumber
Di rel 3 Anda dapat mengakses objek Rack :: Mount :: RouteSet melalui objek Rails.application.routes, lalu panggil kenali di atasnya secara langsung
yang mendapatkan kecocokan pertama (terbaik), bentuk blok berikut ini melingkupi rute yang cocok:
setelah Anda memiliki rute, Anda bisa mendapatkan nama rute melalui route.name. Jika Anda perlu mendapatkan nama rute untuk URL tertentu, bukan jalur permintaan saat ini, maka Anda harus membuat tiruan objek permintaan palsu untuk diturunkan ke rak, periksa ActionController :: Routing :: Routes :: Routes. Routogn.recognize_path untuk melihat bagaimana mereka melakukannya.
sumber
undefined method 'recognize' for #<Journey::Routes:0x007f893dcfa648>
Berdasarkan saran @AmNaN (lebih detail):
Sekarang Anda dapat menyebutnya mis dalam tata letak navigasi untuk menandai item daftar sebagai aktif:
Untuk
users
danalerts
rute,current_page?
akan cukup:Tetapi dengan rute bersarang dan permintaan untuk semua tindakan pengontrol (sebanding dengan
items
),current_controller?
adalah metode yang lebih baik untuk saya:Entri menu pertama aktif untuk rute-rute berikut:
sumber
Atau, lebih elegan:
request.path_info
Sumber:
Dokumentasi Rak Permintaan
sumber
Saya akan menganggap Anda maksud URI:
Sesuai komentar Anda di bawah ini, jika Anda membutuhkan nama controller, Anda dapat melakukan ini:
sumber
self.
masukself.controller_name
danself.controller_class_name
Jika Anda juga membutuhkan parameter :
Dan ingat Anda selalu dapat memanggil
<%= debug request.env %>
dalam tampilan untuk melihat semua opsi yang tersedia.sumber
request.url
request.path #untuk mendapatkan path kecuali url dasar
sumber
Anda dapat melihat semua rute melalui rake: route (ini mungkin membantu Anda).
sumber
Anda dapat melakukan
request.env['REQUEST_URI']
untuk melihat URI yang diminta penuh .. itu akan menampilkan sesuatu seperti di bawah inisumber
Kamu bisa melakukan ini:
Sekarang, Anda dapat menggunakan seperti ini:
sumber