我正在使用带有mongoid的Ruby on Rails 3.1并试图在帖子,评论,用户和标签之间建立一个相当简单的关系.我对mongodb很新,而且一般都没有sql,所以我有点困惑.
我想要完成的是:用户,帖子和评论应该能够有多个标签.标签应具有名称,类型以及使用次数的计数.我需要能够获得所有可用的标签,以便用户可以从中进行选择.反之,能够从用户,帖子和评论中检索标签.
我已经阅读了很多关于它的内容,但似乎无法弄清楚我应该采取哪种方法.我应该使用参考或嵌入式关系吗?我看了几个宝石,但似乎没有人像我上面描述的那样工作.
旁注:我稍后将使用Tire作为我的搜索功能.
很酷,欢迎来到MongoDB!这很难做对,取决于你的应用程序,但我会尝试根据你写的内容和我认为最有效的方法给你一些指示.
情况并非总是如此,但一般理论是,如果一个对象总是被操纵并在另一个对象的上下文中查看,那么你应该将它嵌入到该对象中.您的应用程序中的评论和帖子可能就是这种情况.因此,您可能希望在帖子中嵌入评论.
但是,因为您在多个上下文中使用标记对象,所以我会将它作为自己的集合,如下所示:
class Tag include Mongoid::Document field :tag, type: String field :type, type: String field :count, type: Integer end
让我们按照您的要求运行并构建模型.
标签应具有名称,类型以及使用次数的计数.
通过上面的Tag类代码完成.
用户,帖子和评论应该能够有多个标签.
好吧,让我们给这些类中的每一个一个"标签"字段,它有一个标签ID数组,这将是一个参考关系.
class User include Mongoid::Document field :first_name, type: String field :last_name, type: String field :email, type: String field :tags, type: Array end
此外,我们将在帖子中嵌入评论,同时拥有像我们为用户所做的标记ID数组.
class Post include Mongoid::Document field :subject, type: String field :body, type: String field :tags, type: Array embeds_many :comments end class Comment include Mongoid::Document field :name, type: String field :type, type: String field :count, type: Integer embedded_in :post end
合理?有一些更多的信息在这里对建模Rails的关系,这些种种,但使用mongomapper代替mongoid(所以不要注重语法,但要注意提出的想法)