2010-10-02 73 views
1

所以,如果我在整個應用程序中有一個多態關聯,有沒有辦法給它添加方法?例如,如果:post,:photo和:user都與以下內容相關聯:具有名爲:rankable的多態關聯的排名,我可以以某種方式在以下方面創建方法:可以通過post::photo或:user?我的猜測是,如果可能的話,我需要爲應用程序添加一個Rankable模型並在其中定義方法。那可能嗎?如果是這樣,並且我需要創建模型是正確的,那麼該模型會繼承哪個類,或者如何將其定義爲該多態關係?如何將方法添加到rails多態關聯?

回答

3

我不知道你是如何與模型做到這一點,但你可以很容易地混入添加方法:

module RankableMethods 
    def do_something_useful 
    ... 
    end 
end 

class Post < ActiveRecord::Base 
    include RankableMethods 
    belongs_to :rankable, :polymorphic = true 
end 

p = Post.new 
p.respond_to?(:do_something_useful) # true 
1

你,因爲它適用於分離「多態」的概念ActiveRecord多態關聯,以及經典的OOP繼承意義上的「多態」。

第一種意義上的'Rankable'多態類型不存在,除非ActiveRecord中的數據庫約定允許一個表中的記錄引用多個可能的其他表中的記錄。如果你想在你的對象模型中更具體地表達這種抽象 - 第二種意義上的多態 - 你必須聲明一個獨立的類或模塊,以便你的'Rankable'ActiveRecords可以混合或繼承。