我使用的是Rails 2.3.3,我需要创建一个发送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”的空文本文件
怎么了?
3条答案
按热度按时间kqqjbcuj1#
从Rails 4开始,
head
现在优先于render :nothing
。1优于
它们在技术上是相同的。如果您查看使用cURL的响应,您将看到:
但是,调用
head
提供了一个比调用render :nothing
更明显的替代方法,因为现在可以明确地知道您只生成HTTP头。u4dcyp6a2#
更新:这是遗留Rails版本的旧答案。对于Rails 4+,请参阅William Denniss的文章。
在我看来,响应的内容类型不正确,或者在您的浏览器中没有正确解释。仔细检查你的http头,看看响应的内容类型是什么。
如果是
text/html
以外的任何内容,您可以尝试手动设置内容类型,如下所示:o7jaxewo3#
head:ok,content_type:“text/html”正确