2011-01-08 54 views
92

我在Rails 2.3.3上,我需要創建一個鏈接發送一個post請求。「render:nothing => true」返回空純文本文件?

我有一個看起來像這樣的:

=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_」的空文本文件電子郵件。」

什麼給?

+0

鋼軌5,你可以查看這個答案 https://stackoverflow.com/a/34688727/1770571 – 2017-10-30 12:26:33

+0

鋼軌5,你可以查看這個答案 的https: //stackoverflow.com/a/34688727/1770571 – 2017-10-30 12:27:34

回答

124

更新:這是傳統Rails版本的舊回答。對於Rails 4+,請參閱下面的William Denniss的帖子。

聽起來像是響應的內容類型不正確,或者在瀏覽器中沒有正確解釋。仔細檢查你的http標題,看看響應是什麼類型的內容。

如果它比text/html其他任何東西,你可以嘗試手動設置內容類型是這樣的:

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

由於軌道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" 

他們在技術上是相同的。如果你看一下或者使用捲曲的反應,你會看到:

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