我有一个使用Paperclip的Rails应用程序并将图像保存到S3。当用户上传没有图像的资产时,它将获取Paperclip设置中的默认图像集。
我的API提供这些资源,并且链接到JSON响应中的图像(使用jbuilder),但是我似乎无法返回默认图像URL,它只返回" missing.png&# 34;我希望它将整个URL返回到服务器,并附上缺少的图像路径。
我在模型中设置了默认网址,我尝试使用ActionView :: Helpers :: AssetUrlHelper来获取image_url,但即使它在rails控制台内工作也无法正常工作。我有什么办法可以解决它?
JBuilder文件:
json.profile_picture_smallest asset.profile_picture.url(:smallest)
json.profile_picture_small asset.profile_picture.url(:small)
json.profile_picture_medium asset.profile_picture.url(:medium)
json.profile_picture_large asset.profile_picture.url(:large)
json.profile_picture_original asset.profile_picture.url(:original)
模型中包含的回形针部分
module Picturable
extend ActiveSupport::Concern
included do
has_attached_file :profile_picture, path: '/images/' + name.downcase.pluralize + '/:style/:basename', default_url: "missing.png",
styles: {
smallest: '50x50>',
small: '100x100>',
medium: '200x200>',
large: '400x400>',
png: ['400x400>',:png]
}, :convert_options => {
smallest: '-trim',
small: '-trim',
medium: '-trim',
large: '-trim',
png: '-trim'
}
# Validate the attached image is image/jpg, image/png, etc
validates_attachment_content_type :profile_picture, :content_type => /\Aimage\/.*\Z/
end
def set_uuid_name
begin
self.profile_picture_file_name = SecureRandom.uuid
end while self.class.find_by(:profile_picture_file_name => self.profile_picture_file_name)
end
end
Paperclip配置:
Paperclip::Attachment.default_options[:s3_host_name] = 's3hostname'
开发配置:
config.paperclip_defaults = {
:storage => :s3,
:s3_credentials => {
:bucket => 'paperclipdev',
:access_key_id => 'accesskey',
:secret_access_key => 'secretaccesskey'
}
}
答案 0 :(得分:0)
我认为这样做的方法是使用jbuilder文件中的资产助手:
json.profile_picture_smallest asset_url(asset.profile_picture.url(:smallest))
这里值得一提的是,如果您希望默认网址基于模型是动态的,您还可以将符号方法名称传递给回形针default_url
参数。