如何为#<activestorage :: service :: postgresqls

时间:2019-01-21 18:01:37

标签: ruby-on-rails rails-activestorage

=“”

我要设置一个帐户配置文件系统,并修复未定义的方法`path_for'我想在我的Rails应用程序中使用active_storage支持头像。 我期望看到我的头像,但我得到了这个broken_pics

如果我在其他标签页中打开图片,他会向我发送此app / 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 :(得分:3)

我们只是遇到了同样的问题。原来ActiveStorage :: DiskController#show的实现已从Rails 5.2.1更改为Rails 5.2.2。参见5.2.15.2.2

active_storage-postgresql宝石依赖于Rails 5.2.1的行为。看起来好像有一个PR that has just been merged to fix this,所以我希望很快会有一个新版本的gem来恢复Rails的兼容性。请密切注意https://rubygems.org/gems/active_storage-postgresql

作为临时解决方案,我们添加了一个控制器操作,例如通过send_file下载blob。

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)

答案 1 :(得分:0)

@ user10981734的答案对我有用。实际上,我可以将其简化为更简洁的内容:

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

send_data(
  file.download,
  type: file.content_type,
  filename: File.basename(file.filename.to_s)
)