我有一个使用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
方法中,我想要显示图片的永久网址,我正按照导轨指南(http://edgeguides.rubyonrails.org/active_storage_overview.html#linking-to-files)的建议尝试使用Rails.application.routes.url_helpers.url_for(image)
,但它提出了这个问题错误:
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)
也不起作用,因为它引发了另一个错误:{{1 }}
使用activestorage在模型范围中显示永久URL的正确方法是什么?
答案 0 :(得分:1)
try {
boolean status;
String url = String.format("onedrive.live.com/v1.0/drive/root:/"+step.file_name+":/content");
//exceptions are not coming if i mention https:// in the url. but no output is coming
Request request = new Request.Builder()
.url(url)
.put(RequestBody.create(MediaType.parse(step.getContent_type()),step.getFile_data()))
.addHeader("Authorization", String.format("Bearer %s",step.getAccess_token()))
.build();
OkHttpClient okHttpClient = new OkHttpClient();
Response response = okHttpClient.newCall(request).execute();
status = response.code()==200 ? true : false;
} catch (Exception e) {
e.printStackTrace();
return StepStatus.FAILURE;
}
例如,如果您需要在模型中创建方法(例如rails_blob_path
),则首先应包括cover_url
,然后在使用方法url_helpers
时添加一些参数。您可以在任何控制器,工作程序等中执行相同的操作。
完整的示例如下:
rails_blob_path
答案 1 :(得分:0)
url_for
典型地采用选项哈希值,如果您传入模型,则无法提供host
选项:https://apidock.com/rails/ActionView/RoutingUrlFor/url_for
使用指定的路线助手会更容易,例如images_path(image)
或images_url(image, host: 'your host')
。
如果您真的想使用url_for
,请提供控制器和操作的路径选项:url_for(controller: 'images', action: 'show', id: image.id, host: 'your host')
答案 2 :(得分:0)
调查后我发现的唯一解决方案是使用url_for
和@DiegoSalazar建议的选项哈希,然后使用activeresource提供的blobs
控制器和正确的参数,ej:< / p>
Rails.application.routes.url_for(controller: 'active_storage/blobs', action: :show, signed_id: image.signed_id, filename: image.filename, host: 'www.example.com')
老实说,我认为在模型范围内访问图像的永久网址应该是一种更简单的方法,但是现在是我找到的唯一解决方案。