Bagaimana saya bisa mendapatkan URL absolut saat ini di tampilan Ruby on Rails saya?
The request.request_uri
hanya mengembalikan relatif URL .
ruby-on-rails
ruby
url
Jakub Arnold
sumber
sumber
Jawaban:
Untuk Rails 3.2 atau Rails 4+
Anda harus menggunakan
request.original_url
untuk mendapatkan URL saat ini.Metode ini didokumentasikan pada metode original_url , tetapi jika Anda penasaran, implementasinya adalah:
Untuk Rails 3:
Anda dapat menulis
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
, karenarequest.url
sekarang sudah usang.Untuk Rails 2:
Anda bisa menulis
request.url
alih-alihrequest.request_uri
. Ini menggabungkan protokol (biasanya http: //) dengan host, dan request_uri untuk memberi Anda alamat lengkap.sumber
fullpath
TIDAK termasuk protokol / domain / port! Ini bukan URL absolut!"http://#{request.host+request.fullpath}"
akan bekerja atau sebaliknya, (jika port penting)"http://#{request.host}:#{request.port+request.fullpath}"
"http://#{request.host}:#{request.port}#{request.fullpath}"
request.url
sudah usang? Solusi yang diusulkan hanyalah cara panjang untuk mengatakan apa yangrequest.url
sudah dilakukan; implementasi hanyalah protokol + host_with_port + fullpath ( github.com/rails/rails/blob/… )Saya pikir metode Ruby on Rails 3.0 sekarang
request.fullpath
.sumber
Anda bisa menggunakannya
url_for(only_path: false)
sumber
PERINGATAN DEPRECASI : Menggunakan #request_uri sudah tidak digunakan lagi . Gunakan jalur penuh sebagai gantinya.
sumber
request.uri
dan ini telah ditunjukkan beberapa kali dalam pertanyaan ini, tapi ... ok, terima kasihJika Anda menggunakan Rails 3.2 atau Rails 4 Anda harus menggunakan
request.original_url
untuk mendapatkan URL saat ini.Dokumentasi untuk metode ini ada di http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-original_url tetapi jika Anda penasaran implementasinya adalah:
sumber
Anda dapat menambahkan metode current_url ini di ApplicationController untuk mengembalikan URL saat ini dan memungkinkan penggabungan dalam parameter lainnya
Contoh penggunaan:
sumber
url_for params.merge(:format => "PDF", :only_path => false)
link_to
Anda hanya dapat menggunakanparams.merge
dan melewatiurl_for
semuanyaUntuk Ruby on Rails 3:
Saya menjalankan sesi debugger dan menanyakan objek permintaan:
sumber
Di Ruby on Rails 3.1.0.rc4:
sumber
fullpath
tidak menyediakanabsolute URL
seperti yang diminta poster asli.Saya membutuhkan URL aplikasi tetapi dengan subdirektori. Saya menggunakan:
sumber
Dan Anda dapat dengan mudah menambahkan beberapa parameter baru:
sumber
Saya pikir request.domain akan berfungsi, tetapi bagaimana jika Anda berada di sub direktori seperti blah.blah.com? Sesuatu seperti ini bisa bekerja:
Ubah parameter berdasarkan pada struktur jalur Anda.
Semoga itu bisa membantu!
sumber
Sepertinya
request_uri
sudah usang di Ruby on Rails 3.sumber
Menggunakan Ruby 1.9.3-p194 dan Ruby on Rails 3.2.6:
Jika request.fullpath tidak berfungsi untuk Anda, coba request.env ["HTTP_REFERER"]
Inilah kisah saya di bawah ini.
Saya mendapat masalah serupa dengan mendeteksi URL saat ini (yang ditampilkan di bilah alamat untuk pengguna di browser-nya) untuk halaman kumulatif yang menggabungkan informasi dari pengontrol yang berbeda, misalnya
http://localhost:3002/users/1/history/issues
,.Pengguna dapat beralih ke daftar berbagai jenis masalah. Semua daftar tersebut dimuat melalui Ajax dari berbagai pengontrol / parsial (tanpa memuat ulang).
Masalahnya adalah untuk menetapkan jalur yang benar untuk tombol kembali di setiap item daftar sehingga tombol kembali bisa bekerja dengan baik di halamannya sendiri dan di riwayat halaman kumulatif .
Jika saya menggunakan request.fullpath , ia mengembalikan jalur permintaan JavaScript terakhir yang jelas bukan URL yang saya cari.
Jadi saya menggunakan request.env ["HTTP_REFERER"] yang menyimpan URL dari permintaan yang dimuat ulang terakhir.
Berikut adalah kutipan dari parsial untuk membuat keputusan
sumber
Ini berfungsi untuk Ruby on Rails 3.0 dan harus didukung oleh sebagian besar versi Ruby on Rails:
sumber
Tidak ada saran di sini di utas membantu saya dengan sedih, kecuali saran di mana seseorang mengatakan dia menggunakan debugger untuk menemukan apa yang dia cari.
Saya telah membuat beberapa halaman kesalahan khusus alih-alih standar 404 dan 500, tetapi
request.url
berakhir di/404
bukan yang diharapkan/non-existing-mumbo-jumbo
.Apa yang perlu saya gunakan adalah
sumber
Jika secara relatif, maksud Anda hanya tanpa domain, lalu periksa
request.domain
.sumber
sumber
Anda dapat menggunakan metode ruby:
yang akan mendapatkan path lengkap dengan url basis:
sumber
:root_url
mendapatkan url absolut? Anggap saya menggunakan sesuatu sepertisome_method(:products_brand_url, brand: brand, entity_name: "brand")
dansome_method
didefinisikan sebagai `def some_method (rute, opts = {}) end` Saya tidak ingin rute saya terlihat seperti -http://localhost:3000/brands/brand_name?&entity_name="brand"
. Saya ingin terlihat seperti rutehttp://localhost:3000/brands/brand_name
. Saya hanya inginentity_name
menjadi bagian dari hash opts dan bukan sebagai params ke url absolut.root_url
.Di Rails 3 Anda dapat menggunakan
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
sumber
Anda dapat menggunakan salah satu untuk rel 3.2:
Saya pikir ini akan berhasil di mana saja
sumber
Rails 4.0
Anda dapat menggunakan
request.original_url
, output akan seperti contoh di bawah inisumber
Untuk Rails 3.2 atau Rails 4 Cukup dengan cara ini "request.original_url" Referensi: Metode URL Asli
Untuk Rails 3 Sebagai request.url sudah usang. Kita bisa mendapatkan path absolut dengan menyatukan
Untuk Rails 2
sumber
jika Anda ingin lebih spesifik, artinya, Anda tahu jalan yang Anda butuhkan:
sumber
Untuk rel 3:
sumber
bekerja di rel 2.3.4 diuji dan tidak tahu tentang versi lain.
sumber
Untuk mendapatkan URL permintaan tanpa parameter kueri apa pun.
sumber
Anda bisa menggunakan
atau
untuk mendapatkan URL saat ini.
sumber
Kamu bisa menggunakan:
atau
Semoga ini akan menyelesaikan masalah Anda.
Bersulang
sumber
Anda dapat mengatur variabel ke
URI.parse(current_url)
, saya belum melihat proposal ini di sini dan itu berfungsi untuk saya.sumber
Untuk mendapatkan URL absolut yang artinya
from the root
bisa ditampilkan seperti iniHelper users_url menghasilkan URL yang menyertakan protokol dan nama host. Helper users_path hanya menghasilkan bagian jalur.
sumber