2011-01-08 30 views
92

Tôi đang ở trên Rails 2.3.3 và tôi cần tạo một liên kết gửi yêu cầu đăng bài."render: nothing => true" trả về tệp plaintext trống?

tôi có một mà trông như thế này:

=link_to('Resend Email', {:controller => 'account', :action => 'resend_confirm_email' }, {:method => :post}) 

Mà làm cho hành vi JavaScript thích hợp vào liên kết:

<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>' 

controller action của tôi đang làm việc, và thiết lập để làm gì:

respond_to do |format| 
    format.all { render :nothing => true, :status => 200 } 
end 

Nhưng khi tôi nhấp vào liên kết, trình duyệt của tôi tải xuống tệp văn bản trống có tên "resend_confirm_ e-mail."

Điều gì mang lại?

+0

Đối với đường ray 5, bạn có thể xem câu trả lời này https://stackoverflow.com/a/34688727/1770571 –

+0

Đối với đường ray 5 bạn có thể xem câu trả lời này https: //stackoverflow.com/a/34688727/1770571 –

Trả lời

124

CẬP NHẬT: Đây là câu trả lời cũ cho các phiên bản Rails cũ. Đối với Rails 4+, hãy xem bài đăng của William Denniss bên dưới.

Âm thanh với tôi như kiểu nội dung của phản hồi không chính xác hoặc không được diễn giải chính xác trong trình duyệt của bạn. Kiểm tra kỹ các tiêu đề http của bạn để xem loại nội dung phản hồi là gì.

Nếu đó là bất cứ điều gì khác hơn là text/html, bạn có thể thử để tự thiết lập kiểu nội dung như thế này:

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

Kể từ Rails 4, head hiện nay ưa thích hơn render :nothing. 1

head :ok, content_type: "text/html" 

# or (equivalent) 

head 200, content_type: "text/html" 

được ưa thích hơn

render nothing: true, status: :ok, content_type: "text/html" 

# or (equivalent) 

render nothing: true, status: 200, content_type: "text/html" 

Họ là những kỹ thuật giống nhau. Nếu bạn nhìn vào phản ứng cho cả hai sử dụng cURL, bạn sẽ thấy:

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 

Tuy nhiên, gọi head cung cấp một lựa chọn rõ ràng hơn để gọi render :nothing vì nó bây giờ rõ ràng rằng bạn chỉ tạo ra tiêu đề HTTP.


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

Cảm ơn bạn, đặc biệt đối với phiên bản Rails 4 về điều này. –

+0

Vì điều này cũng làm việc trong Rails 3, nó nên là giải pháp ưa thích cho điều đó quá (nhưng rõ ràng là OP là trên một ứng dụng Rails 2.3 để câu trả lời được lựa chọn là thích hợp). –

+2

'kết quả đầu 200' trong câu trả lời' 304' cho tôi (trên đường ray 4.1.6). Bảng điều khiển hiển thị 200 mã trạng thái, nhưng chrome (bảng điều khiển mạng) hiển thị 304. Phương thức 'render: nothing => true' đã hoạt động. –

Các vấn đề liên quan