如何在模型类Rails + Paperclip中获取attr_accessible的值

时间:2013-12-05 04:36:38

标签: ruby-on-rails paperclip

我正在尝试为我要上传到我的

的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,

如何在此处访问该值?

2 个答案:

答案 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”实例。