"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/1770571
셀마 고마

답변:


146

업데이트 : 이것은 레거시 Rails 버전에 대한 오래된 답변입니다. Rails 4+의 경우 아래 William Denniss의 게시물을 참조하십시오.

응답의 콘텐츠 유형이 올바르지 않거나 브라우저에서 올바르게 해석되지 않는 것 같습니다. http 헤더를 다시 확인하여 응답 내용 유형을 확인하십시오.

이외의 text/html경우 다음과 같이 콘텐츠 유형을 수동으로 설정할 수 있습니다.

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

258

Rails 4부터는 head이제 render :nothing. 1

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 :nothing이제 HTTP 헤더 만 생성한다는 것이 명시 적이기 때문에 호출에 대한보다 분명한 대안을 제공합니다 .


  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
헤더 만 반환되는 경우 콘텐츠 유형이 필요합니까?
Usagi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.