Ответ 1
Я понял это.
Это было turbolinks, это все испортило. Я добавил data-no-turbolink в ссылку на экспорт, и теперь он работает так, как ожидалось.
У меня возникают проблемы с методом Rails: send_data
Здесь мое действие:
def export
send_data(current_user.contacts.to_csv,
type: 'text/csv; charset=utf-8; header=present',
disposition: 'attachment; filename=contacts.csv'
)
end
Это не будет означать загрузку, он просто отобразит результат на экране. Я пробовал серверы pow
и thin
.
Я не могу понять, что я делаю неправильно?
Я использую rails 4.0.0.beta
EDIT:
Заголовки CURL:
< HTTP/1.1 200 OK
< X-Frame-Options: SAMEORIGIN
< X-XSS-Protection: 1; mode=block
< X-Content-Type-Options: nosniff
< X-UA-Compatible: chrome=1
< X-XHR-Current-Location: /contacts/export
< Content-Disposition: attachment; filename=contacts.csv
< Content-Transfer-Encoding: binary
< Content-Type: text/csv; charset=utf-8; header=present
< Cache-Control: private
< ETag: "48d3d8bd1c8d25cafb82ab705e4875ab"
< Set-Cookie: request_method=GET; path=/
< X-Request-Id: c2588883-f3f9-4f68-8a8c-0de758c47288
< X-Runtime: 0.185206
< Connection: close
< Server: thin 1.5.0 codename Knife
Я понял это.
Это было turbolinks, это все испортило. Я добавил data-no-turbolink в ссылку на экспорт, и теперь он работает так, как ожидалось.
Ответы здесь, для turbolinks classic. В более новых версиях turbolinks есть более новая нотация:
<a href="/" data-turbolinks="false">Disabled</a>
https://github.com/turbolinks/turbolinks#disabling-turbolinks-on-specific-links
send_data имеет хэш-вариант, поэтому тип, расположение и имя файла должны быть заданы в хеше:
def export
send_data(current_user.contacts.to_csv,
type: 'text/csv', disposition: 'attachment', filename: 'contacts.csv')
end