我成功使用Paperclip gem将文件上传到Amazon S3。我的问题是,如何配置我的模型以根据对象属性更改文件路径?
例如,我希望将2015 RAM 1500的图像上传到" cars / 2015 / RAM / 1500 /:id。"
这是我尝试过的。 ":id /:style_:extension"被正确的信息取代,但其他属性却没有 - 即使每辆车都有一年,制造商和型号。
class Car < ActiveRecord::Base
has_attached_file :file, default_url: "/images/:style/missing.png"
validates_attachment_content_type :file, content_type: /\Aimage\/.*\Z/
has_attached_file :file,
:storage => :s3,
:path => "cars/:year/:manufacturer/:model/:id/:style_:extension",
:s3_credentials => Proc.new{|a| a.instance.s3_credentials }
belongs_to :manufacturer
def s3_credentials
{:bucket => ENV['bucket'], :access_key_id => ENV['access_key_id'], :secret_access_key => ENV['secret_access_key']}
end
end
答案 0 :(得分:0)
好的,它在文档(oops)中:Paperclip Interpolations
我为插入汽车模型所需的每个属性添加了此块:
Paperclip.interpolates :year do |attachment, style|
attachment.instance.year
end
答案 1 :(得分:0)
这是您可以执行的另一种方法,它非常干净且可重复使用。尽管有时会感到担忧,但这是其中非常有用的一种情况!
# lib/interpolates.rb
module Interpolates
extend ActiveSupport::Concern
included do
def self.interpolates(attr)
Paperclip.interpolates(attr) do |attachment, style|
attachment.instance.send(attr)
end
end
end
end
然后,在您的任何模型中:
# models/car.rb
class Car < ApplicationRecord
include Interpolates
interpolates :manufacturer
# ...
end
然后,您只需很少的代码就可以在所需的任何模型中使用它!