在模型中生成图像 URL - ActiveStorage
Generate image URL in model - ActiveStorage
我有一个使用 ActiveStorage (Rails 5.2.0.rc2) 的简单模型,模型如下所示:
class Vacancy < ApplicationRecord
has_one_attached :image
validates_presence_of :title
def to_builder
Jbuilder.new do |vacancy|
vacancy.call(self, :id, :title, :description, :created_at, :updated_at)
vacancy.image do
vacancy.url image.attached? ? Rails.application.routes.url_helpers.url_for(image) : nil
end
end
end
end
然后在 to_builder
方法中,我想显示图像的永久 URL,我尝试按照 rails 指南中的建议使用 Rails.application.routes.url_helpers.url_for(image)
( http://edgeguides.rubyonrails.org/active_storage_overview.html#linking-to-files) 但它会引发此错误:
Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
在我的应用程序中,我已经设置了 default_url_options[:host]
,但它不起作用,即使写入 url_for(image, host: 'www.example.com')
或 url_for(image, only_path: true)
也不起作用,因为它引发了另一个错误:wrong number of arguments (given 2, expected 1)
使用 activestorage 在模型范围内显示永久 URL 的正确方法是什么?
经过调查,我发现的唯一解决方案是按照@DiegoSalazar 的建议使用 url_for
和选项散列,然后使用 activeresource 提供的 blobs
控制器和正确的参数 ej :
Rails.application.routes.url_for(controller: 'active_storage/blobs', action: :show, signed_id: image.signed_id, filename: image.filename, host: 'www.example.com')
老实说,我认为访问模型范围内图像的永久 url 应该是一种更简单的方法,但目前这是我找到的唯一解决方案。
对模型和控制器中的附件使用方法rails_blob_path
例如,如果您需要在模型中创建一个方法(例如 cover_url
),首先您应该包含 url_helpers
,然后使用带有一些参数的方法 rails_blob_path
。您可以在任何控制器、工作器等中执行相同的操作。
下面的完整示例:
class Event < ApplicationRecord
include Rails.application.routes.url_helpers
def cover_url
rails_blob_path(self.cover, disposition: "attachment", only_path: true)
end
end
我有一个使用 ActiveStorage (Rails 5.2.0.rc2) 的简单模型,模型如下所示:
class Vacancy < ApplicationRecord
has_one_attached :image
validates_presence_of :title
def to_builder
Jbuilder.new do |vacancy|
vacancy.call(self, :id, :title, :description, :created_at, :updated_at)
vacancy.image do
vacancy.url image.attached? ? Rails.application.routes.url_helpers.url_for(image) : nil
end
end
end
end
然后在 to_builder
方法中,我想显示图像的永久 URL,我尝试按照 rails 指南中的建议使用 Rails.application.routes.url_helpers.url_for(image)
( http://edgeguides.rubyonrails.org/active_storage_overview.html#linking-to-files) 但它会引发此错误:
Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
在我的应用程序中,我已经设置了 default_url_options[:host]
,但它不起作用,即使写入 url_for(image, host: 'www.example.com')
或 url_for(image, only_path: true)
也不起作用,因为它引发了另一个错误:wrong number of arguments (given 2, expected 1)
使用 activestorage 在模型范围内显示永久 URL 的正确方法是什么?
经过调查,我发现的唯一解决方案是按照@DiegoSalazar 的建议使用 url_for
和选项散列,然后使用 activeresource 提供的 blobs
控制器和正确的参数 ej :
Rails.application.routes.url_for(controller: 'active_storage/blobs', action: :show, signed_id: image.signed_id, filename: image.filename, host: 'www.example.com')
老实说,我认为访问模型范围内图像的永久 url 应该是一种更简单的方法,但目前这是我找到的唯一解决方案。
对模型和控制器中的附件使用方法rails_blob_path
例如,如果您需要在模型中创建一个方法(例如 cover_url
),首先您应该包含 url_helpers
,然后使用带有一些参数的方法 rails_blob_path
。您可以在任何控制器、工作器等中执行相同的操作。
下面的完整示例:
class Event < ApplicationRecord
include Rails.application.routes.url_helpers
def cover_url
rails_blob_path(self.cover, disposition: "attachment", only_path: true)
end
end