У меня есть ссылка в моем приложении rails, которая должна экспортировать CSV. Но когда я нажимаю на ссылку, она перезагружает страницу как html. Я пытался добавить response.headers['Content-Type'] = 'text/csv'
response.headers['Content-Disposition'] = 'attachment; filename=invoice.csv'
к контроллеру, но это не помогает.
def index
respond_to do |format|
format.html
format.csv do
response.headers['Content-Type'] = 'text/csv'
response.headers['Content-Disposition'] = 'attachment; filename=custome_incentives.csv'
send_data @incentives.to_csv
end
end
end
<%= link_to 'Download to CSV', incentives_path(property.slug, format: :csv), class: 'btn csv' %>
Я попытался поместить binding.pry в блок format.csv
, но он не срабатывает.
@CAmador Это все еще дает мне тот же ответ.
byebug/log этот формат.csv, действительно ли блок запускается?
@CAmador Его не бьют
установите новое действие только для экспорта или закомментируйте все, что есть в response_to, кроме вызова send_data
Кроме того, incenctives_path(property.slug)
вообще указывает на index
?
@CAmador, создав пользовательское действие, исправил это
Рад знать. Я думаю, что это была проблема с маршрутизацией, кстати. Возможно, ваше индексное действие вообще не сработало. Проверьте журнал.
@CAmador Только что проверил. Я нажимал на это действие, а не на блок format.csv
Предполагая, что все маршруты в порядке, вы пробовал так включили filename
вот так?
def index
respond_to do |format|
format.html
format.csv do
send_data @incentives.to_csv, filename: 'custome_incentives.csv'
end
end
end
Также можно заставить ссылку для скачивания, если не получится.
Это не помогает.
Вам не нужны эти заголовки, просто укажите тип и имя файла:
send_data @incentives.to_csv, type: 'text/csv', filename: 'myfile.csv'
.