2012-01-04 68 views
0

新手問題。我有以下型號:多態關聯並設置資產的默認值

class Asset < ActiveRecord::Base 
    belongs_to :assetable, :polymorphic => true 
    #paperclip 
    has_attached_file :asset, 
    :hash_secret => "my-secret", 
    :url => "/images/:hash_:basename_:style.:extension", 
    :path => UPLOAD_PATH + "/:hash_:basename_:style.:extension", 
    :styles => { :medium => "300x300>", :thumb => "75x75>" 

    } 
end 

class Location < ActiveRecord::Base 
    has_many :assets, :as => :assetable, :dependent => :destroy 
end 

class MenuItem < ActiveRecord::Base 
    has_many :assets, :as => :assetable 
end 

我的資產有一個名爲description的屬性。如果assetable_type是一個「MenuItem」並且描述爲零,我希望描述是關聯的menu_item的正文。我將如何做到這一點?

THX

回答

1
class Asset < ActiveRecord::Base 
    before_save :set_description 

    private 

    def set_description 
     self.description ||= assetable.body if assetable.is_a?(MenuItem) 
    end 
end 

或修改訪問

def description 
    return self[:description] unless self[:description].blank? 
    assetable.description if assetable.is_a? MenuItem 
end 
+0

我能不能做到這一點的訪問,如果它是一個菜單項和描述爲空。換句話說,即使它是一個menu_item,允許管理員用戶覆蓋描述?看起來不是,我得到一個'堆棧層太深'的錯誤 – timpone 2012-01-04 05:20:17

+0

在訪問器中,你必須使用'self [:description]'而不是'description'或'self.description',否則它會遞歸地調用你的方法。我更新了我的答案。 – Robin 2012-01-04 17:25:44