“render:nothing => true”返回空的纯文本文件?
我在Rails 2.3.3上,我需要build立一个链接发送一个post请求。
我有一个看起来像这样的:
=link_to( 'Resend Email', {:controller => 'account', :action => 'resend_confirm_email' }, {:method => :post} )
哪个在链接上产生适当的JavaScript行为:
<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”的空文本文件。
是什么赋予了?
听起来像响应的内容types不正确,或在您的浏览器中没有正确解释。 仔细检查你的http标题,看看响应是什么types的内容。
如果它不是text/html
,你可以尝试手动设置内容types,如下所示:
render :nothing => true, :status => 200, :content_type => 'text/html'
由于Rails 4, head
现在比render :nothing
更render :nothing
。 1
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
提供了一个更明显的select来调用render :nothing
因为它现在明确,你只生成HTTP头。