【问题标题】:Embedded reference not saved嵌入式参考未保存
【发布时间】:2011-07-12 01:52:37
【问题描述】:

在 mongoid 和 rails 3 下,我有一个 Users 集合和一个 Projects 集合,其中嵌入了许多 Relationships,模型是:

类用户
包括 Mongoid::Document
字段 :name, :type => 字符串
referenced_in :relationship, :inverse_of => :user
结束

类项目
包括 Mongoid::Document
字段 :title, :type => 字符串
embeds_many:关系
结束

类关系
包括 Mongoid::Document
字段 :type, :type => 字符串
参考资料:用户
Embedded_in :subject, :inverse_of => :relationships
结束

我的问题是关系的引用用户永远不会保存到关系中。例如以下命令只保存 :type:

project1 = Project.new(:title => "project1", :relationships => [ {:type => "master", :user => "4d779568bcd7ac0899000002"} ])

我的目标是有一个类似这样的项目文档:

{ "_id" : ObjectId("4d77a8b2bcd7ac08da00000f"), "title" : "project1", "relationships" : [
{
“类型”:“主人”,
"用户" : ObjectId("4d775effbcd7ac05a8000002"),
"_id" : ObjectId("4d77a8b2bcd7ac08da000010")
}
] }

:user 永远不存在,我在这里遗漏了什么吗?非常感谢您的帮助!

泰德

【问题讨论】:

  • 你用的是哪个版本的mongoid?
  • 我在使用 mongoid 2.0.0 时遇到了这个问题
  • 可能你现在已经解决了,但是尝试从用户中删除 referenced_in :relationship 并更改 references_one :userreferenced_in :user 的关系

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


【解决方案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) 对于您的创建,不要为 user 分配用户 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 => :user”中指定 inverse_of。只需“referenced_in :relationship”即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 2011-10-13
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多