嵌入式引用未保存

时间:2011-03-09 16:53:51

标签: ruby-on-rails-3 reference mongoid

在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”)
    }
  ]}

:用户永远不会出现,我在这里遗漏了什么吗?非常感谢你的帮助!

泰德

1 个答案:

答案 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”即可。