2016-04-27 49 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