Mob*_*een 5 ruby ruby-on-rails rails-api rails-activestorage ruby-on-rails-5.2
如何获取我的has_one模型附件的URL,该附件存储在Rails控制器的活动存储中。因此,我将能够将其作为完整链接发送为json中的api。到目前为止,我已经尝试了以下方法,但是每种方法都存在各种问题:
1)current_user.image.service_url ----#的未定义方法`service_url'
2)Rails.application.routes.url_helpers.rails_disk_blob_path(current_user.image,only_path:true),它给我的输出是:
"/rails/blobs/%23%3CActiveStorage::Attached::One:0x007f991c7b41b8%3E"
Run Code Online (Sandbox Code Playgroud)
但这不是网址,对吗?我无法在浏览器上点击图像。
3)url_for ----
undefined method `active_storage_attachment_url' for #<Api::V1::UsersController:0x007f991c1eaa98
Run Code Online (Sandbox Code Playgroud)
Jon*_*ado 10
rails_blob_path
在控制器和模型中使用附件的方法例如,如果您需要cover_url
在控制器中分配一个变量(例如),首先您应该包含url_helpers
和之后使用rails_blob_path
带有一些参数的方法。你可以在任何模型、工人等中做同样的事情。
完整示例如下:
class ApplicationController < ActionController::Base
include Rails.application.routes.url_helpers
def index
@event = Event.first
cover_url = rails_blob_path(@event.cover, disposition: "attachment", only_path: true)
end
end
Run Code Online (Sandbox Code Playgroud)
有时,例如,API 需要为客户端(例如手机等)返回带有主机/协议的完整 url。在这种情况下,将主机参数传递给所有 rails_blob_url 调用是重复的而不是 DRY 的。甚至,您可能需要在 dev/test/prod 中进行不同的设置才能使其工作。
如果您正在使用 ActionMailer 并且已经在环境/*.rb 中配置了该主机/协议,您可以使用rails_blob_url
或重用该设置rails_representation_url
。
# in your config/environments/*.rb you might be already configuring ActionMailer
config.action_mailer.default_url_options = { host: 'www.my-site.com', protocol: 'https' }
Run Code Online (Sandbox Code Playgroud)
Rails.application.url_helpers.rails_blob_url
当您只需要 2 个时,我建议只调用完整的方法,而不是将至少 50 个方法转储到您的模型类中(取决于您的 routes.rb)。
class MyModel < ApplicationModel
has_one_attached :logo
# linking to a variant full url
def logo_medium_variant_url
variant = logo.variant(resize: "1600x200>")
Rails.application.routes.url_helpers.rails_representation_url(
variant,
Rails.application.config.action_mailer.default_url_options
)
end
# linking to a original blob full url
def logo_blob_url
Rails.application.routes.url_helpers.rails_blob_url(
logo.blob,
Rails.application.config.action_mailer.default_url_options
)
end
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4859 次 |
最近记录: |