在 Mongoid 中,我将如何实现 ActiveRecord :through => 提供的相同功能?

class Advertiser
    include Mongoid::Document
    embeds_many :campaigns

    # how would I do this
    embeds_many :advertisements, :through => :campaigns

end

class Campaign
    embedded_in :advertiser
    embeds_many :advertisements
end

class Advertisement
    embedded_in :campaign

    # or this?
    embedded_in :advertiser, :through => :campaign
end

然后能够做到Advertiser.first.advertisementsAdvertisement.first.advertiserAdvertiser.campaigns.collect{|campaign| campaign.advertisement} 不是一个选项

如何,我将如何使用 references_many/referenced_in 来做这些?

最佳答案

简短的回答是你不能。 MongoDB 没有连接表的概念,也没有一般的连接。 Mongoid 多对多“模拟”是通过在每一侧存储外键数组来完成的。

回应评论:
MongoDB 是一个文档存储。因此,它适用于“文档”高度异构的情况。当您使用事件和广告的子树存储您的广告商时,您将必须以 ruby​​ 代码收集广告商的广告。如果您的数据具有非常同类的形式,那么您可以考虑改用关系数据库。我们经常使用 MySQL 来关联对象,然后将 MongoDB 文档添加到对象中,以便它们可以扩展。

关于ruby-on-rails - Mongoid 嵌入/has_many :through equivalent,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6710226/

10-11 23:49