2013-08-23 45 views
0

比方說,我有你怎麼能使用Mongoid關聯任意模型?

class Notification 
    include Mongoid::Document 

    field :noteworthy, type: Boolean, default: true 
    # some kind of relation to a source 
    before_create :remove_noise 

    def remove_noise 
     notification = Notification.last 
     if notification.source_id == self.source_id 
      notification.update_attribute(:noteworthy, false) 
     end 
    end 
end 

是有一些方法來做到這一點,其中的通知的來源可以是任何mongoid ::文檔模型的一個?

用例:

我想創建一個通知中心,只顯示值得注意的通知,這意味着那些來自不同車型始發。

+0

我不知道我是否理解這個問題,你能擴展更多嗎? –

回答

0

哼,有趣,與任意模型的關係。

那麼我會去做的方式是讓它不是任意的。

class Notification 
    include Mongoid::Document 
    field :noteworthy, type: Boolean, default: true 
    has_one :source 
end 

class Source 
    include Mongoid::Document 
    belongs_to, :notification 
    # stuff 
end 

class Webpage < Source 
    include Mongoid::Document 
    # stuff 
end 

class Facebook < Source 
    include Mongoid::Document 
    # stuff 
end 

class Twitter < Source 
    include Mongoid::Document 
    # stuff 
end 

這樣,has_one源可以是網頁,Twitter或Facebook模型,因爲它們都從源類繼承。在網頁,Twitter,Facebook中添加自定義字段和方法,並通過將重複的方法和字段移動到源模型中來嘗試保持DRY。

+0

會源需要一個belongs_to? –

+0

是的,當然,這只是它背後的想法,你可能需要使用has_and_belongs_to_many – Theta