Рендеринг CSV отправляет файл (как если бы я использовал send_data) вместо рендеринга текста

Следующий код возвращает мне файл people.csv вместо рендеринга текста. Если я не использую блок response_to и просто отображаю текст, браузер работает как положено. Что заставляет браузер отправлять данные в файл? Как и ожидалось, MIME-тип — 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-типом с шаблоном, вызывает рендеринг 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>

person Alexei Danchenkov    schedule 31.10.2012    source источник
comment
Я заметил, что это поведение не одинаково во всех браузерах. Например, он должен работать как положено на хроме.   -  person Mathieu Mahé    schedule 01.11.2012
comment
Я работаю в Chrome, и он все еще ведет себя так, как я описал.   -  person Alexei Danchenkov    schedule 01.11.2012


Ответы (1)


Ответ на первую часть состоит в том, чтобы заставить text/plain mime-type использовать content_type, например:

respond_to do |format|
  format.csv { render text: "Hello, world", content_type: 'text/plain' }
end
person Alexei Danchenkov    schedule 31.10.2012