事实证明,我引用User
的Message
的结构是合适的,并且序列化错误与关联用户和对话有关。这是我的结构和创建步骤。我很感谢任何有关更好实践的反馈,谢谢。
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)
。
你可以很容易地用'belongs_to'替换'referenced_in'。早些时候他们是同义词,但不知道最新版本。 – rubish 2012-02-14 09:52:39
Mongoid :: Relations :: Referenced :: In仍然是一个有效的模块。问题在于,由于嵌入了消息,因此不允许通过关系关联从用户文档引用消息文档。那么如何在消息中引用用户呢? – 2012-02-14 19:30:37