2012-01-04 12 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"であり、記述がnilである場合、説明は関連する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 

それともメニュー項目であると説明がnullの場合、私はちょうどアクセサとしてこれを行うことができアクセサ

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

を変更します。言い換えれば、たとえそれがmenu_itemであっても、管理者が説明を上書きできるようにすることはできますか? 'stack level too deep'エラーが発生する – timpone

+0

アクセッサでは、' description'や 'self.description'の代わりに' self [:description] 'を使う必要があります。そうでなければ、あなたのメソッドを再帰的に呼び出します。私は自分の答えを更新しました。 – Robin

関連する問題