Bagaimana saya bisa mendapatkan URL absolut saat ini di tampilan Ruby on Rails saya?
The request.request_uri
hanya mengembalikan relatif URL .
Bagaimana saya bisa mendapatkan URL absolut saat ini di tampilan Ruby on Rails saya?
The request.request_uri
hanya mengembalikan relatif URL .
Jawaban:
Anda harus menggunakan request.original_url
untuk mendapatkan URL saat ini.
Metode ini didokumentasikan pada metode original_url , tetapi jika Anda penasaran, implementasinya adalah:
def original_url
base_url + original_fullpath
end
Anda dapat menulis "#{request.protocol}#{request.host_with_port}#{request.fullpath}"
, karena request.url
sekarang sudah usang.
Anda bisa menulis request.url
alih-alih request.request_uri
. Ini menggabungkan protokol (biasanya http: //) dengan host, dan request_uri untuk memberi Anda alamat lengkap.
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 yang request.url
sudah dilakukan; implementasi hanyalah protokol + host_with_port + fullpath ( github.com/rails/rails/blob/… )
Anda bisa menggunakannya url_for(only_path: false)
PERINGATAN DEPRECASI : Menggunakan #request_uri sudah tidak digunakan lagi . Gunakan jalur penuh sebagai gantinya.
request.uri
dan ini telah ditunjukkan beberapa kali dalam pertanyaan ini, tapi ... ok, terima kasih
Jika 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:
def original_url
base_url + original_fullpath
end
Anda dapat menambahkan metode current_url ini di ApplicationController untuk mengembalikan URL saat ini dan memungkinkan penggabungan dalam parameter lainnya
# https://x.com/y/1?page=1
# + current_url( :page => 3 )
# = https://x.com/y/1?page=3
def current_url(overwrite={})
url_for :only_path => false, :params => params.merge(overwrite)
end
Contoh penggunaan:
current_url --> http://...
current_url(:page=>4) --> http://...&page=4
url_for params.merge(:format => "PDF", :only_path => false)
link_to
Anda hanya dapat menggunakan params.merge
dan melewati url_for
semuanya
Untuk Ruby on Rails 3:
request.url
request.host_with_port
Saya menjalankan sesi debugger dan menanyakan objek permintaan:
request.public_methods
Di Ruby on Rails 3.1.0.rc4:
request.fullpath
fullpath
tidak menyediakan absolute URL
seperti yang diminta poster asli.
url_for(params)
Dan Anda dapat dengan mudah menambahkan beberapa parameter baru:
url_for(params.merge(:tag => "lol"))
Saya pikir request.domain akan berfungsi, tetapi bagaimana jika Anda berada di sub direktori seperti blah.blah.com? Sesuatu seperti ini bisa bekerja:
<%= request.env["HTTP_HOST"] + page = "/" + request.path_parameters['controller'] + "/" + request.path_parameters['action'] %>
Ubah parameter berdasarkan pada struktur jalur Anda.
Semoga itu bisa membantu!
Sepertinya request_uri
sudah usang di Ruby on Rails 3.
Using #request_uri is deprecated. Use fullpath instead.
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
- if request.env["HTTP_REFERER"].to_s.scan("history").length > 0
- back_url = user_history_issue_path(@user, list: "needed_type")
- else
- back_url = user_needed_type_issue_path(@user)
- remote ||= false
=link_to t("static.back"), back_url, :remote => remote
Ini berfungsi untuk Ruby on Rails 3.0 dan harus didukung oleh sebagian besar versi Ruby on Rails:
request.env['REQUEST_URI']
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
request.original_url
Anda dapat menggunakan metode ruby:
:root_url
yang akan mendapatkan path lengkap dengan url basis:
localhost:3000/bla
:root_url
mendapatkan url absolut? Anggap saya menggunakan sesuatu seperti some_method(:products_brand_url, brand: brand, entity_name: "brand")
dan some_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 rute http://localhost:3000/brands/brand_name
. Saya hanya ingin entity_name
menjadi bagian dari hash opts dan bukan sebagai params ke url absolut.
root_url
.
Di Rails 3 Anda dapat menggunakan
request.original_url
http://apidock.com/rails/v3.2.8/ActionDispatch/Request/original_url
Rails 4.0
Anda dapat menggunakan request.original_url
, output akan seperti contoh di bawah ini
get "/articles?page=2"
request.original_url # => "http://www.example.com/articles?page=2"
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
"#{request.protocol}#{request.host_with_port}#{request.fullpath}"
Untuk Rails 2
request.url
request.env["REQUEST_URI"]
bekerja di rel 2.3.4 diuji dan tidak tahu tentang versi lain.
Anda bisa menggunakan
request.original_url
atau
"#{request.protocol}#{request.host_with_port}"
untuk mendapatkan URL saat ini.
Kamu bisa menggunakan:
request.full_path
atau
request.url
Semoga ini akan menyelesaikan masalah Anda.
Bersulang
Untuk mendapatkan URL absolut yang artinya from the root
bisa ditampilkan seperti ini
<%= link_to 'Edit', edit_user_url(user) %>
Helper users_url menghasilkan URL yang menyertakan protokol dan nama host. Helper users_path hanya menghasilkan bagian jalur.
users_url: http://localhost/users
users_path: /users