"Render: nothing => true" boş düz metin dosyası mı döndürüyor?


116

Ben Rails 2.3.3'teyim ve gönderi isteği gönderen bir bağlantı yapmam gerekiyor.

Şuna benzeyen bir tane var:

= link_to('Resend Email', 
  {:controller => 'account', :action => 'resend_confirm_email'}, 
  {:method => :post} )

Bu, bağlantıdaki uygun JavaScript davranışını sağlar:

<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>'

Denetleyici eylemim çalışıyor ve hiçbir şey göstermeyecek şekilde ayarlandı:

respond_to do |format|
  format.all { render :nothing => true, :status => 200 }
end

Ancak bağlantıyı tıkladığımda tarayıcım "resend_confirm_email" adlı boş bir metin dosyası indiriyor.

Ne oluyor?


Raylar 5 için, bu yanıtı inceleyebilirsiniz stackoverflow.com/a/34688727/1770571
Salma Gomaa

Yanıtlar:


146

GÜNCELLEME: Bu, eski Rails sürümleri için eski bir cevaptır. Rails 4+ için, William Denniss'in aşağıdaki gönderisine bakın.

Bana yanıtın içerik türü doğru değil veya tarayıcınızda doğru şekilde yorumlanmıyor gibi geldi. Yanıtın hangi içerik türü olduğunu görmek için http başlıklarınızı iki kez kontrol edin.

Bunun dışında bir şey varsa text/html, içerik türünü manuel olarak şu şekilde ayarlamayı deneyebilirsiniz:

render :nothing => true, :status => 200, :content_type => 'text/html'

258

Rails 4'ten beri headartık tercih edilmektedir render :nothing. 1

head :ok, content_type: "text/html"

# or (equivalent)

head 200, content_type: "text/html"

yerine tercih edilir

render nothing: true, status: :ok, content_type: "text/html"

# or (equivalent)

render nothing: true, status: 200, content_type: "text/html"

Teknik olarak aynılar. Her iki cURL kullanımının yanıtına bakarsanız, şunu göreceksiniz:

HTTP/1.1 200 OK
Connection: close
Date: Wed, 1 Oct 2014 05:25:00 GMT
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
X-Runtime: 0.014297
Set-Cookie: _blog_session=...snip...; path=/; HttpOnly
Cache-Control: no-cache

Bununla birlikte, arama, aramaya headdaha açık bir alternatif sağlar render :nothingçünkü artık yalnızca HTTP üstbilgileri oluşturduğunuz açıktır .


  1. http://guides.rubyonrails.org/layouts_and_rendering.html#using-head-to-build-header-only-responses

Bu aynı zamanda Rails 3'te de çalıştığından, bunun için de tercih edilen çözüm olmalıdır (ancak açıkçası OP bir Rails 2.3 uygulamasındadır, bu nedenle seçilen yanıt uygundur).
Asfand Qazi

2
head 200304benim için bir yanıtla sonuçlanıyor (4.1.6 raylarında). Konsol 200 durum kodunu gösterir, ancak krom (ağ paneli) 304'ü gösterir. render :nothing => trueYaklaşım işe yaradı.
Bastian Hofmann

2
Yalnızca bir başlık döndürülüyorsa içerik türü gerekli mi?
Usagi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.