以下代码返回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
推论:渲染xls,这是一个正确注册的mime-type,模板强制渲染application.html,这对我来说很奇怪。
# /app/controllers/people_controller.rb
class PeopleController < ApplicationController
def index
respond_to do |format|
format.xls
end
end
end
# /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>
答案 0 :(得分:8)
第一部分的答案是用content_type
强制text / plain mime-type,如下所示:
respond_to do |format|
format.csv { render text: "Hello, world", content_type: 'text/plain' }
end