Saya di Rails 2.3.3, dan saya perlu membuat tautan yang mengirimkan permintaan pos.
Saya punya satu yang terlihat seperti ini:
= link_to('Resend Email',
{:controller => 'account', :action => 'resend_confirm_email'},
{:method => :post} )
Yang membuat perilaku JavaScript sesuai pada tautan:
<a href="/account/resend_confirm_email"
onclick="var f = document.createElement('form');
f.style.display = 'none';
this.parentNode.appendChild(f);
f.method = 'POST';
f.action = this.href;
var s = document.createElement('input');
s.setAttribute('type', 'hidden');
s.setAttribute('name', 'authenticity_token');
s.setAttribute('value', 'EL9GYgLL6kdT/eIAzBritmB2OVZEXGRytPv3lcCdGhs=');
f.appendChild(s);
f.submit();
return false;">Resend Email</a>'
Tindakan pengontrol saya berfungsi, dan disetel untuk tidak merender apa pun:
respond_to do |format|
format.all { render :nothing => true, :status => 200 }
end
Tetapi ketika saya mengklik link tersebut, browser saya mendownload file teks kosong bernama "resend_confirm_email."
Apa yang memberi?
ruby-on-rails
rest
link-to
pengguna225643
sumber
sumber
Jawaban:
UPDATE: Ini adalah jawaban lama untuk versi Rails lama. Untuk Rails 4+, lihat postingan William Denniss di bawah.
Bagi saya, jenis konten dari responsnya tidak benar, atau tidak diinterpretasikan dengan benar di browser Anda. Periksa kembali tajuk http Anda untuk melihat jenis konten tanggapannya.
Jika selain itu
text/html
, Anda dapat mencoba mengatur jenis konten secara manual seperti ini:sumber
Sejak Rails 4,
head
sekarang lebih disukairender :nothing
. 1lebih disukai daripada
Mereka secara teknis sama. Jika Anda melihat respons untuk menggunakan cURL, Anda akan melihat:
Namun, memanggil
head
memberikan alternatif yang lebih jelas untuk memanggilrender :nothing
karena sekarang eksplisit bahwa Anda hanya membuat header HTTP.sumber
head 200
menghasilkan304
tanggapan bagi saya (pada rel 4.1.6). Konsol menampilkan 200 kode status, tetapi chrome (panel jaringan) menampilkan 304.render :nothing => true
Pendekatan ini berhasil.