rails 3.1 генерирует CSV-файл - PullRequest
       5

rails 3.1 генерирует CSV-файл

7 голосов
/ 18 октября 2011

Я могу экспортировать данные таблицы в файл CSV, однако после каждой записи есть пустая строка.Почему и как я могу это исправить?

в index.html.erb

<%= link_to "Export to csv", request.parameters.merge({:format => :csv})%>

в index.csv.erb

<%- headers = ["Id", "Name"] -%>
<%= CSV.generate_line headers %>
<%- @customers.each do |n| -%>
<%- row = [ n.id, n.fname ] -%>
<%= CSV.generate_line row %>
<%- end -%>

Ответы [ 5 ]

9 голосов
/ 26 ноября 2015

CSV.generate_line добавляет символ новой строки в конец создаваемой строки, но так же <%= %>, поэтому вы получаете две новые строки.

Для подавления символа новой строки из erb для выражения выражения используется следующий синтаксис: <%= -%>

так:

<%- headers = ["Id", "Name"] -%>
<%= CSV.generate_line headers -%>
<%- @customers.each do |n| -%>
<%- row = [ n.id, n.fname ] -%>
<%= CSV.generate_line row -%>
<%- end -%>

Принятый ответ уходит в новую строку, сгенерированную из erb, но подавляет новую строку из CSV.generate_line который я считаю не лучшим способом сделать это.

6 голосов
/ 23 мая 2012

Это то, что исправило.

<%= CSV.generate_line row, :row_sep => ?\t, :quote_char => ?\ %>
2 голосов
/ 21 августа 2012

для меня сработало следующее использование strip и html_safe, примененное после генерации строки:

<%- headers = ["Id", "Tour No"] -%>
<%= CSV.generate_line(headers).strip%>
<%- @tours.each do |t| -%>
<%-   row = [ t.id,t.tour_no] -%>
<%= CSV.generate_line(row).html_safe.strip%>
<%- end -%>
0 голосов
/ 27 февраля 2015

Я думал, что скину свое решение, так как только что боролся с этим.

В основном на моей локальной машине (Mac) все работало абсолютно нормально, тогда, когда я развернул свое приложение на heroku, оно начало добавлять в эти загадочные новые строки.

Для меня решение было использовать:

CSV.generate_line(row, row_step: ?\r).html_safe

Как примечание, я использую рельсы 4.1.6.

Надежда, которая помогает некоторым другим людям бороться

0 голосов
/ 19 октября 2011

Попробуйте это:

row = [ n.id, n.fname.strip ]

strip удалит \ r и / или \ n, что может привести к появлению пустых строк. У меня нет других объяснений, твой исходный код в порядке!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...