0

假设我有

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::document 模型之一?

用例:

我想创建一个仅显示值得注意的通知的通知中心,即来自不同模型的通知。

4

1 回答 1

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 模型,因为它们都继承自源类。在 Webpage、Twitter、Facebook 中添加自定义字段和方法,并尝试通过将重复的方法和字段移动到源模型中来保持其 DRY。

于 2013-09-05T02:48:06.953 回答