Refactored
Бенуа абсолютно прав и спасибо за этот совет.Посмотрев на ваш код, я вижу гораздо более четкий подход к генерации вашего CSV, который, как я думал, я бы поделился для тех, кто приземлился здесь (как я!):
<%=
response.content_type = 'application/octet-stream'
@persons.collect{ |person| [ person[:name], person[:nickname] ].to_csv }.join.html_safe
%>
По сути, вам не нужновсе, что CSV генерирует вещи.Ruby может взять Array
и превратить его в строку CSV, а затем просто использовать collect
и join
, чтобы аккуратно сложить все вместе.
Вы также можете сделать следующее, если предпочитаете иметь егов отдельных строках, что я и делаю:
<% response.content_type = 'application/octet-stream' -%>
<% @persons.each do |person| -%>
<%= [ person[:name], person[:nickname] ].to_csv( row_sep: nil ).html_safe %>
<% end -%>
Здесь вам нужно будет использовать -%>
, чтобы убедиться, что вы не получите лишних пустых строк, и вам нужно будет использовать опцию row_sep: nil
так что to_csv
не добавляет \n
в конце каждой строки.
В любом случае, надеюсь, это поможет очистить код некоторых людей.