0

我的User模型has_and_belongs_to_many :conversations嵌入式mongoid参考

Conversation模型embeds_many :messages

Message型号需要有senderrecipient

我无法在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,它似乎也一样。

+0

你可以很容易地用'belongs_to'替换'referenced_in'。早些时候他们是同义词,但不知道最新版本。 – rubish 2012-02-14 09:52:39

+0

Mongoid :: Relations :: Referenced :: In仍然是一个有效的模块。问题在于,由于嵌入了消息,因此不允许通过关系关联从用户文档引用消息文档。那么如何在消息中引用用户呢? – 2012-02-14 19:30:37

回答

3

事实证明,我引用UserMessage的结构是合适的,并且序列化错误与关联用户和对话有关。这是我的结构和创建步骤。我很感谢任何有关更好实践的反馈,谢谢。

 
class User 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    include Mongoid::Paranoia 

    has_and_belongs_to_many :conversations 
end 
 
class Conversation 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    include Mongoid::Paranoia 

    has_and_belongs_to_many :users 
    embeds_many :messages 
end 
 
class Message 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    include Mongoid::Paranoia 

    embedded_in :conversation 
    embeds_one :sender, class_name: 'User' 
    embeds_one :recipient, class_name: 'User' 

    field :content 
    field :read_at, type: DateTime 
    field :sender_deleted, type: Boolean, default: false 
    field :recipient_deleted, type: Boolean, default: false 

    belongs_to :sender, class_name: "User", inverse_of: :sender, foreign_key: 'sender_id' 
    belongs_to :recipient, class_name: "User", inverse_of: :recipient, foreign_key: 'recipient_id' 
end 

凡在我试图@conversation.build(user_ids: [@user_one,@user_two]),适当的方式是@conversation.users.concat([@user_one,@user_two])。那么你可以简单地@conversation.messages.build(sender: @user_one, recipient: @user_two)