2016-04-27 48 views
0

我有很多车型需要包括has_attached_file与相同参数替换哈希参数与一个有对象

我怎么能存储在一个哈希对象的参数?

当前使用

class Product < ActiveRecord::Base 

    has_attached_file :cover, 
    :storage => :s3, 
    :s3_region => ENV['AWS_REGION'], 
    :s3_host_name => ENV['S3_HOST'], 
    :s3_credentials => "#{Rails.root}/config/s3.yml" , 
    :styles => IMAGE_STYLES, 
    :default_url => "/images/missing.png" 

end 

预期使用

default_s3_arguments = {:storage => :s3, 
     :s3_region => ENV['AWS_REGION'], 
     :s3_host_name => ENV['S3_HOST'], 
     :s3_credentials => "#{Rails.root}/config/s3.yml" , 
     :styles => IMAGE_STYLES, 
     :default_url => "/images/missing.png"} 


class Product < ActiveRecord::Base 

    has_attached_file :cover, default_s3_arguments 

end 

回答

0

如果它是一个常数,我相信这是,

您可以在初始化定义哈希这样

如果您需要使用此HASH在其它模型

S3_ARGUMENTS = {:storage => :s3, 
       :s3_region => ENV['AWS_REGION'], 
       :s3_host_name => ENV['S3_HOST'], 
       :s3_credentials => "#{Rails.root}/config/s3.yml" , 
       :styles => IMAGE_STYLES, 
       :default_url => "/images/missing.png"} 

然后在模型中,你可以使用它像这样:

class Product < ActiveRecord::Base 

    has_attached_file :cover, S3_ARGUMENTS 

end 

如果你不需要这些在其他模型一样,那么定义常量在类模型本身。

+0

我建议从名称删除'DEFAULT',因为严格来说,并根据情况怎么样我们通常在Ruby中使用这个词,它不是一个真正的默认,而是一组常用的选项。 (也就是说,读者看到'DEFAULT'可能会查找所使用的不同数据和默认参数说明,而在较高层次上描述该选项集的名称会很有帮助,或者,如果不是,则只需简单地使用S3_ARGUMENTS或FILE_ATTACHED_ARGUMENTS或其他 –

+0

@KeithBennett是的,我完全同意,我只是使用相同的名称,OP使用。btw,我已经更新了答案!:) – Alfie