Как оказалось, моя структура Message
, ссылающаяся на User
, была подходящей, и ошибка сериализации была связана с привязкой пользователей к беседе.Вот моя структура и шаги создания.Я благодарен за любые отзывы о лучших практиках, спасибо.
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)
.