我正在尝试为我要上传到我的
的mp3对象设置一些元数据AWS S3通过Rails使用回形针。
class myClass < ActiveRecord::Base
attr_accessible :mp3, file_name
attr_accessor :mp3, file_name
has_attached_file :mp3,
// some s3 credential info + bucket
:s3_metadata => {
:name => //get the name attr of the instance that I'm trying to save
}
这是在Model.rb文件中。
问题是,如果我想将元数据设置为此实例具有的某个attr,
如何在此处访问该值?
答案 0 :(得分:0)
在类.attributes
的对象上调用ActiveRecord::Base
将返回所有属性的哈希值。
在这种情况下,您可能能够使用lambda,例如
name: ->{ method_that_returns_the_name }
您可能无法在类声明中设置文件名。你试过吗
@object.file_name = 'My File Name'
@object.save
如果您想从其他地方取名,可以使用过滤器。
before_save do
self.file_name = "image-#{self.id}"
end
答案 1 :(得分:0)
要在您的示例中完成此操作,您可以使用:
class myClass < ActiveRecord::Base
attr_accessible :mp3, file_name
attr_accessor :mp3, file_name
has_attached_file :mp3,
// some s3 credential info + bucket
s3_headers: lambda { |attachment|
{ 'x-amz-meta-name' => attachment.instance.name }
}
看起来s3_metadata不会占用proc,但你可以使用s3_headers代替标题为“x-amz-meta-”。您可以通过lambda中的attachment.instance访问“myClass”实例。