1. ホーム
  2. ruby-on-rails

[解決済み] "render :nothing => true" は空のプレーンテキストファイルを返すのですか?

2022-02-11 10:11:23

質問

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

どうしたんですか?

解決方法は?

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

レスポンスのコンテンツタイプが正しくないか、ブラウザで正しく解釈されていないようですね。httpヘッダを再確認して、レスポンスのコンテンツタイプを確認してください。

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

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