“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 :nothingrender :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提供了一个更明显的select来调用render :nothing因为它现在明确,你只生成HTTP头。


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