保存关系属性的最佳方法是什么?例如,我有模型 Person 和 Project(M:N 关系)。我想在项目中保存人员角色。在关系数据库中,它将是联结表 person_project 中的一个属性。在 Mongoid (RoR) 中实现这一点的最佳方法是什么?
第二个问题:我应该为多对多关系保存ID,还是只保存一侧?
文档: http: //mongoid.org/en/mongoid/docs/relations.html#has_and_belongs_to_many
class Person
include Mongoid::Document
has_and_belongs_to_many :projects
end
class Project
include Mongoid::Document
has_and_belongs_to_many :persons
end
Mongoid 使用数组在两个集合中存储 ID。Person
集合有一个字段project_ids
,Project
集合有一个字段person_ids
我不会在项目中存储用户或特定用户角色(超级用户除外,或出于最终缓存原因)。仅仅因为有两个生命周期,当你做项目的时候你可能不会和用户混在一起。因此,作为开始,我会将角色设置存储在如下人员中:
{
_id : Obj{},
projects : [
{project_one : role_name}, //use a name if name is unique if not use project_id as key
{project_two : role_name}
]
}
或者更简单但需要更多空间
{
_id : Obj{},
projects : [
{project_id : project_one,
role : role_name},...
]
}
即使您可以在项目中存储一些与用户相关的内容,我也会始终针对用户测试角色。