【问题标题】:Mongoid nested has_one problemMongoid 嵌套 has_one 问题
【发布时间】:2011-08-28 23:40:00
【问题描述】:

我正在尝试使用 mongoid 更新嵌套的 has_one 模型,但它不会保留 has_one 关联

我正在运行 Rails 3.07 和 Mongoid 2.2

小部件模型

class Widget
  include Mongoid::Document

  embeds_many :permissions, :default => []

end

权限模型

class Permission   
  include Mongoid::Document

  field :admin, :type => Boolean, :default => false  

  has_one :user

  embedded_in :widget 

end

用户模型

class User
  include Mongoid::Document

  belongs_to :permission

end

这是我从 rails 控制台得到的结果;

@widget.permissions << Permission.new(:user => current_user)
 => [#<Permission _id: 4e5aced1c155df4b33000001, _type: nil, admin: false>]

@widget.save
 => true

@widget.permissions.first.user
 => #<User _id: 4e5ac71ec155df470f000001, _type: nil, email: "ada ..... >

看起来好像用户被保存了,但是它没有持久化到 mongo。 权限正在保存,但没有用户。

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails mongoid


    【解决方案1】:

    您应该在用户模型中使用“embedded_in”而不是“belongs_to”吗?

    【讨论】:

    • 它没有嵌入它的链接,所以 referenced_in 会更好。 references_one 和 referenced_in 可能会更好,但我知道它们无论如何都是别名
    • 啊,好吧 - mongoid 级联保存到链接的文档吗?我不记得在任何地方读过它——但这并不意味着它没有。您只保存小部件 - 如果它没有级联,您将无法保存此人。
    • 我希望它确实如此,我可能只是在做一些愚蠢的事情。当然就像它在控制台中保存文档一样......感谢您的快速回复。
    • 不用担心。目前没有自己测试它的环境,但是如果您通过执行 Widget.find() 在控制台中重新加载小部件会发生什么?人还在吗?是什么让你觉得他们看起来像是在储蓄?请记住,在大多数情况下,_id 是由 mongo 驱动程序在客户端生成的,因此不一定要保存文档才能拥有一个。
    • 这是我的智障,权限模型中的has_one:用户应该是belongs_to:用户,用户模型不需要向后关联,因为用户正在获得一个permission_id用户模型。它保留了数据,但错误地存储了关系。欢呼
    猜你喜欢
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    相关资源
    最近更新 更多