2

people.csv次のコードは、テキストをレンダリングする代わりにファイルを返します。Respond_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

結果:テンプレートを使用して適切に登録された MIME タイプである xls をレンダリングすると、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>
4

1 に答える 1

8

最初の部分への答えは、次のように text/plain MIME タイプを強制することですcontent_type

respond_to do |format|
  format.csv { render text: "Hello, world", content_type: 'text/plain' }
end
于 2012-10-31T23:44:08.227 に答える