在mongoid和rails 3下我有用户的集合和项目的集合,其中嵌入了许多关系,模型是:< / p>
班级用户
包括Mongoid :: Document
字段:name,:type =&gt;字符串
referenced_in:relationship,:inverse_of =&gt; :用户
结束
班级项目
包括Mongoid :: Document
field:title,:type =&gt;字符串
embeds_many:人际关系 端阶级关系
包括Mongoid :: Document
field:type,:type =&gt;字符串
references_one:用户
embedded_in:subject,:inverse_of =&gt; :关系
端
我的问题是,关系的引用用户永远不会保存到关系中。例如,对于以下命令,仅保存:类型:
project1 = Project.new(:title =&gt;“project1”,:relationships =&gt; [{:type =&gt;“master”,:user =&gt;“4d779568bcd7ac0899000002”})
我的目标是制作一个与此类似的项目文件:
{“_ id”:ObjectId(“4d77a8b2bcd7ac08da00000f”),“title”:“project1”,“relationship”:[
{
“类型”:“主人”,
“user”:ObjectId(“4d775effbcd7ac05a8000002”),
“_id”:ObjectId(“4d77a8b2bcd7ac08da000010”)
}
]}
:用户永远不会出现,我在这里遗漏了什么吗?非常感谢你的帮助!
泰德
答案 0 :(得分:1)
所以你可能想要改变一些事情:
1)避免使用字段名称“type”,因为这是单表继承使用的rails魔术列名。也许将它们更改为user_type和relationship_type。
2)使用Mongoid 2.0及更高版本,您可以使用像has_many和belongs_to这样的Active Model语法而不是引用。 http://mongoid.org/docs/relations/referenced/1-n.html
3)对于您的创建,请尝试分配用户对象,而不是使用用户ID分配用户。
project1 = Project.new( :title => "project1", :relationships => [ {:type => "master", :user => User.first} ] )
或者您可以像这样分配user_id:
project1 = Project.new( :title => "project1", :relationships => [ {:type => "master", :user_id => "the_use_id_you_want_to_associate"} ] )
仅供参考,您不必在“referenced_in:relationship,:inverse_of =&gt;:user”中指定inverse_of。只需“referenced_in:relationship”即可。