2016-11-10 4 views
1

В контроллере у меня есть:рельсы send_data только работает «инлайн» не скачивает

send_data(data, filename: "payment_file") 

По мнению у меня есть:

<%= link_to 'Download File', bank_file_download_path(@bank_file_job), 
    data: {no_turbolink: true}, class: "btn btn-primary btn-lg btn-block" %> 

Но он всегда показывает содержимое файла инлайн. Может кто-нибудь, пожалуйста, помогите мне?

ответ

0

Согласно документации, если вы хотите, чтобы это было скачать, то вам необходимо установить :disposition загрузить

например

send_data data, filename: "payment_file", disposition: 'download' 

http://apidock.com/rails/ActionController/DataStreaming/send_data

+0

Спасибо за ответ @Taryn. Но «disposition: attachment» является значением по умолчанию, поэтому вам обычно не нужно указывать его. Если вы скажете «disposition: inline», тогда он отобразит содержимое в браузере. Но если вы ничего не говорите о расположении, то по умолчанию используется привязка, которая означает, что загрузка должна работать. Так что это не проблема в этом случае – coffeecoder

+0

Замечательно, что вы нашли реальное решение. Часто стоит проверять любые умолчания, будучи явным ... иногда вы обнаружите, что что-то еще где-то волшебство изменило ваши значения по умолчанию. –

5

Я понял это. Как уже указывалось в another answer, турболизаторы должны быть отключены. Но предлагаемое решение в этом ответе не сработало, потому что синтаксис для его отключения на определенной странице изменился с turbolinks 5.0 и далее. Теперь должно быть так.

<%= link_to 'Download File', file_download_path , data: {turbolinks: false} %> 
+0

Отличный ответ. Обновление до рельсов 5.0 может быть сложным ... disposition:: attachment, x_sendfile: true или тип установки send_file в 'csv' не будет работать без turbolinks: false. –

Смежные вопросы