渲染CSV会发送文件(就像我使用send_data)而不是渲染文本

Ale*_*kov 2 csv ruby-on-rails actionview mime-types

以下代码返回一个people.csv文件而不是呈现文本.如果我没有使用respond_to块并只是渲染文本,浏览器将按预期工作.是什么迫使浏览器在文件中发送数据?正如预期的那样,mime-type是'text/csv'.

# /app/controllers/people_controller.rb
class PeopleController < ApplicationController
  def index
    respond_to do |format|
      format.csv { render text: "Hello, world" }
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

推论:渲染xls,这是一个正确注册的mime类型,模板强制渲染application.html,这看起来很奇怪.

# /app/controllers/people_controller.rb
class PeopleController < ApplicationController
  def index
    respond_to do |format|
      format.xls
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

.

# /app/views/people/index.xls.erb
<table border="1">
  <tr>
    <th>ID</th>
    <th>Name</th>
  </tr>
  <% @people.each do |person| %>
  <tr>
    <td><%= person.id %></td>
    <td><%= person.name %></td>
  </tr>
  <% end %>
</table>
Run Code Online (Sandbox Code Playgroud)

Ale*_*kov 8

第一部分的答案是强制text/plain mime-type content_type,如下所示:

respond_to do |format|
  format.csv { render text: "Hello, world", content_type: 'text/plain' }
end
Run Code Online (Sandbox Code Playgroud)