如何在我的rails控制器中获取存储在活动存储中的has_one模型附件的URL . 所以,我可以在json中将其作为api的完整链接发送 . 到目前为止,我尝试了以下方法,但每个方法都提出了各种问题:
1)current_user.image.service_url ----未定义的方法`service_url'for#
2)Rails.application.routes.url_helpers.rails_disk_blob_path(current_user.image,only_path:true),它给我一个输出,如:
"/rails/blobs/%23%3CActiveStorage::Attached::One:0x007f991c7b41b8%3E"
但这不是网址,对吗?我无法在浏览器上点击并获取图像 .
3)url_for ----
undefined method `active_storage_attachment_url' for #<Api::V1::UsersController:0x007f991c1eaa98
4 回答
我没有使用rails活动存储,但我在文档中读到的这可能对你有帮助
试试
rails_blob_url(model.image)
更多http://edgeguides.rubyonrails.org/active_storage_overview.html
对控制器和模型中的附件使用rails_blob_path方法
例如,如果您需要在控制器中分配变量(例如
cover_url
),首先应该包含url_helpers
,并在使用方法rails_blob_path
后添加一些参数 . 您可以在任何模型, Worker 等中执行相同的操作 .完整示例如下:
有时,例如API需要为客户端(例如移动电话等)返回具有主机/协议的完整URL . 在这种情况下,将host参数传递给所有rails_blob_url调用是重复的而不是DRY . 甚至,您可能需要在dev / test / prod中使用不同的设置才能使其正常工作 .
如果您正在使用ActionMailer并且已在环境/ * .rb中配置该主机/协议,则可以使用
rails_blob_url
或rails_representation_url
重用该设置 .我建议只调用完整的
Rails.application.url_helpers.rails_blob_url
而不是将至少50种方法转储到模型类中(取决于你的routes.rb),当你只需要2时 .我能够使用以下内容在浏览器中查看图像:
其中
upload
是附加图像 .