【问题标题】:Embedded mongoid referencing嵌入式 mongoid 引用
【发布时间】:2012-02-14 04:37:51
【问题描述】:

我的User 模特has_and_belongs_to_many :conversations

Conversation 模型embeds_many :messages

Message 模型需要有一个sender 和一个recipient

我在Mongoid documentation 找不到referenced_in

如何分配消息中的用户?我尝试关注类似于this implementation 的内容,但不断收到BSON::InvalidDocument: Cannot serialize an object of class Mongoid::Relations::Referenced::In into BSON.

2013 年 11 月更新reference_in 不再适用于 Mongoid 3.0?改成belongs_to 好像还是一样的。

【问题讨论】:

  • 您可以轻松地将referenced_in 替换为belongs_to。之前它们是同义词,但不知道最新版本。
  • Mongoid::Relations::Referenced::In 仍然是一个有效的模块。问题是由于嵌入了消息,因此不允许通过关系关联从用户文档中引用消息文档。那么如何在消息中引用用户呢?

标签: mongodb reference ruby-on-rails-3.1 mongoid foreign-key-relationship


【解决方案1】:

事实证明,我的 Message 引用 User 的结构是合适的,并且序列化错误与将用户与对话相关联有关。这是我的结构和创建步骤。感谢您就更好的做法提供任何反馈,谢谢。

类用户 包括 Mongoid::Document 包括 Mongoid::Timestamps 包括 Mongoid::Paranoia has_and_belongs_to_many:对话 结尾 课堂对话 包括 Mongoid::Document 包括 Mongoid::Timestamps 包括 Mongoid::Paranoia has_and_belongs_to_many :用户 embeds_many:消息 结尾 班级留言 包括 Mongoid::Document 包括 Mongoid::Timestamps 包括 Mongoid::Paranoia 嵌入:对话 embeds_one:发件人,class_name:'用户' embeds_one :recipient, class_name: '用户' 领域:内容 字段:read_at,类型:日期时间 字段:sender_deleted,类型:布尔值,默认值:false 字段:recipient_deleted,类型:布尔值,默认值:false belongs_to :sender, class_name: "User", inverse_of: :sender, foreign_key: 'sender_id' 属于_to:recipient,class_name:“用户”,inverse_of::recipient,foreign_key:'recipient_id' 结尾

在我尝试@conversation.build(user_ids: [@user_one,@user_two]) 之前,正确的方法是@conversation.users.concat([@user_one,@user_two])。然后你可以简单地@conversation.messages.build(sender: @user_one, recipient: @user_two)

【讨论】:

    猜你喜欢
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多