ruby-on-rails – Rails,MongoID和嵌入式关系
我在Rails中有一些关于MongoID和嵌入式关系的问题.
在我的模型中,我有: class Board include Mongoid::Document attr_accessible :title field :title,:type => String #has_and_belongs_to_many :users embeds_many :items end 我打电话的时候 Board.all 它返回整个集合,包括:items. 我在许多文章/论坛中都读过,使用MongoDB嵌入式关系应优先于引用的关系,但我有一些问题: >表演怎么样?每次我想要检索一个板子我也会检索它里面的物品:它有时可能很有用但是在我只想要板子的信息而不是其中的物品的情况下我应该创建一个不检索物品的新方法. 到目前为止,我已经注意到使用嵌入式文档的唯一优势是像SQL中的所谓“连接”,但我也看到很多性能问题,有没有重要的理由使用嵌入式关系而不是引用关系? 编辑 正如Adam C所指出的,我的想法与以下情况相关: 如前所述,我将在每个板块中都有许多项目,并使用Rails脚手架,它生成的方法从数据库中检索整个Board文档但很多次(例如编辑板时)我想加载没有项目的文档部分. 由于我将主要使用JSON调用,我的想法是在url中添加一个可选参数,如“get_items”设置为TRUE,以防我想要获取项目,在其他情况下我会使用Mongoid: Model.without 例如,让我们采取索引操作: def index @boards = Board.all respond_to do |format| format.html # index.html.erb format.json { render json: @boards } end end 我只需要获取Board Model中指定的字段(在这种情况下只有:title),没有项目,所以我可以使用: def index @boards = Board.without :items respond_to do |format| format.html # index.html.erb format.json { render json: @boards } end end 那我的原因有些问题? 解决方法
如果您需要单独检索项目,则不应嵌入它们.
我的经验法则: >顶级域对象(您自己使用的对象,并不总是出现在其“父”的上下文中)应该获得自己的集合. 一个.不要无限制地成长.也就是说,在1-N关系中,N是有界的. 湾始终(或几乎总是)与父母一起出现. 嵌入或相关都不应该是首选.应该平等地考虑它们. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |