「render:nothing => true」は空のプレーンテキストファイルを返しますか?


116

私はRails 2.3.3を使用しています。投稿リクエストを送信するリンクを作成する必要があります。

私はこのようなものを持っています:

= 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」という名前の空のテキストファイルをダウンロードします。

何ができますか?


レール5については、この回答を確認できます。stackoverflow.com
a/34688727/

回答:


146

更新:これはレガシーのRailsバージョンに対する古い答えです。Rails 4+については、以下のWilliam Dennissの投稿を参照してください。

応答のコンテンツタイプが正しくない、またはブラウザで正しく解釈されないように思えます。HTTPヘッダーを再確認して、応答のコンテンツタイプを確認します。

以外の場合はtext/html、次のようにコンテンツタイプを手動で設定してみてください。

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

258

Rails 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

ただし、呼び出しheadrender :nothingHTTPヘッダーのみを生成することを明示しているため、呼び出しの方がより明白な代替手段となります。


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

これはRails 3でも機能するため、これも推奨されるソリューションです(ただし、OPは明らかにRails 2.3アプリ上にあるので、選択された回答が適切でした)。
Asfand Qazi 2014

2
head 200304私のための応答になります(レール4.1.6)。コンソールには200のステータスコードが表示されますが、クロム(ネットワークパネル)には304が表示されrender :nothing => trueます。
Bastian Hofmann

2
ヘッダーのみが返される場合、コンテンツタイプは必要ですか?
うさぎ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.