Как исправить неопределенный метод `path_for 'для # <ActiveStorage :: Service :: PostgreSQLS - PullRequest
0 голосов
/ 21 января 2019

Я настраиваю систему профилирования аккаунта и хочу поддержать аватар с помощью active_storage в моем приложении rails.Я ожидаю увидеть свой аватар, но вместо этого у меня есть broken_pics

Если я открою картинку в других вкладках, он отправит мне это приложение / controllers / active_storage / disk_controller.rbстрока 10-17:

def show
if key = decode_verified_key
  serve_file disk_service.path_for(key[:key]), content_type: key[:content_type], disposition: key[:disposition]
else
  head :not_found
end

конец проблемы из этой строки или выше serve_file disk_service.path_for(key[:key]), content_type: key[:content_type], disposition: key[:disposition]

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

@ user10981734 ответ работал для меня. На самом деле мне удалось свести это к чему-то более краткому:

file = ActiveStorage::Attachment.find(params[:id]).blob

send_data(
  file.download,
  type: file.content_type,
  filename: File.basename(file.filename.to_s)
)
0 голосов
/ 29 января 2019

У нас только что была такая же проблема.Оказывается, реализация ActiveStorage :: DiskController # show изменилась с Rails 5.2.1 на Rails 5.2.2.См. 5.2.1 против 5.2.2

Драгоценный камень active_storage-postgresql основывался на поведении Rails 5.2.1.Похоже, существует PR, который был только что объединен для исправления этого , поэтому я ожидаю, что скоро выйдет новая версия гема для восстановления совместимости с Rails.Следите за https://rubygems.org/gems/active_storage-postgresql.

В качестве временного исправления мы добавили действие контроллера, аналогичное загрузке больших двоичных объектов с помощью send_file.

def download_file
  attachment = ActiveStorage::Attachment.find(params[:id])
  file = attachment.blob
  data = file.download
  send_data(data, type: file.content_type, filename: file.filename, disposition: "inline")
end

# then call like 
download_file_path(model.file.id)
...