"रेंडर: कुछ भी नहीं>> सच" खाली सादे फ़ाइल को रिटर्न करता है?


116

मैं रेल्स 2.3.3 पर हूं, और मुझे एक लिंक बनाने की आवश्यकता है जो पोस्ट अनुरोध भेजता है।

मैं एक है कि इस तरह दिखता है:

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

जो लिंक पर उचित जावास्क्रिप्ट व्यवहार करता है:

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

मेरी नियंत्रक क्रिया काम कर रही है, और कुछ भी नहीं करने के लिए सेट करें:

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

लेकिन जब मैं लिंक पर क्लिक करता हूं, तो मेरा ब्राउज़र "resend_confirm_email" नामक एक खाली पाठ फ़ाइल डाउनलोड करता है।

क्या देता है?


रेल के लिए 5, तो आप इस जवाब की समीक्षा कर सकते stackoverflow.com/a/34688727/1770571
सलमा Gomaa

जवाबों:


146

अद्यतन: यह विरासत रेल संस्करणों के लिए एक पुराना उत्तर है। रेल 4+ के लिए, नीचे विलियम डेनिस की पोस्ट देखें।

मुझे लगता है कि सामग्री के प्रकार की प्रतिक्रिया सही नहीं है, या आपके ब्राउज़र में सही ढंग से व्याख्या नहीं की गई है। प्रतिक्रिया किस प्रकार की है, यह देखने के लिए अपने http हेडर को दोबारा जांचें।

यदि यह इसके अलावा कुछ भी है text/html, तो आप सामग्री प्रकार को मैन्युअल रूप से सेट करने का प्रयास कर सकते हैं:

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

258

रेल 4 के बाद से, headअब अधिक पसंद किया जाता है render :nothing1

head :ok, content_type: "text/html"

# or (equivalent)

head 200, content_type: "text/html"

से अधिक पसंद किया जाता है

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

# or (equivalent)

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

वे तकनीकी रूप से समान हैं। यदि आप CURL का उपयोग करने के लिए प्रतिक्रिया को देखते हैं, तो आप देखेंगे:

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

हालाँकि, कॉलिंग कॉल करने का headएक अधिक स्पष्ट विकल्प प्रदान करता है render :nothingक्योंकि अब यह स्पष्ट है कि आप केवल HTTP हेडर उत्पन्न कर रहे हैं।


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

चूंकि यह रेल 3 में भी काम करता है, इसलिए यह उसके लिए भी पसंदीदा समाधान होना चाहिए (लेकिन स्पष्ट रूप से ओपी रेल 2.3 एप्लिकेशन पर है इसलिए चुना गया उत्तर उपयुक्त था)।
असफंद काजी

2
head 200304मेरे लिए एक प्रतिक्रिया में परिणाम (पटरियों पर 4.1.6)। कंसोल 200 स्थिति कोड दिखाता है, लेकिन क्रोम (नेटवर्क पैनल) 304 दिखाता है। render :nothing => trueदृष्टिकोण ने काम किया।
बास्टियन हॉफमैन

2
यदि केवल हेडर लौटाया जा रहा है तो क्या सामग्री प्रकार आवश्यक है?
उस्गी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.