Встраивание ответов на сообщения внутри родительского сообщения с помощью mongodb с использованием mongoid

Я думаю, что лучше всего вставлять ответы на конкретное сообщение внутри этого сообщения, и я пытаюсь реализовать это с помощью mongoid. вот что у меня есть

class Message
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Paranoia 

  field :subject
  field :body
  field :sender_deleted, :type => Boolean, :default => false
  field :recipient_deleted, :type => Boolean, :default => false
  field :read_at, :type => DateTime

  referenced_in :sender, :class_name => "User", :inverse_of => :sender, :foreign_key => 'sender_id'
  referenced_in :recipient, :class_name => "User", :inverse_of => :recipient, :foreign_key => 'recipient_id'

  embeds_many :replies, :class_name => 'Message'
  embedded_in :message, :inverse_of => :replies

вот часть, где я пытаюсь определить отношение сообщения и его ответов:

  embeds_many :replies, :class_name => 'Message'
  embedded_in :message, :inverse_of => :replies

у меня это не работает, и я не знаю почему, есть идеи, как я могу это сделать?


person Allen Bargi    schedule 25.10.2010    source источник


Ответы (1)


Является ли это лучшей практикой или нет, является очень спорной темой. Например, вы должны помнить об ограничении размера объекта (в настоящее время 4 МБ, но скоро оно увеличится).

что касается вашего вопроса: я предлагаю вам изменить

  embeds_many :replies, :class_name => 'Message'
  embedded_in :message, :inverse_of => :replies

to

  embeds_many :replies, :class_name => 'Message'
  referenced_in :message

И вам также придется указать оба соединения вручную (это не должно быть проблемой, так как они, вероятно, в любом случае неизменяемы).

irb(main):002:0> msg1 = Message.new :subject => 'new question'
=> #<Message _id: 4cc7699f457601d7e8000001, created_at: nil, body: nil, updated_at: nil, subject: "new question", read_at: nil, sender_deleted: false, message_id: nil, recipient_deleted: false>
irb(main):003:0> msg2 = Message.new :subject => 'first comment'
=> #<Message _id: 4cc769b6457601d7e8000002, created_at: nil, body: nil, updated_at: nil, subject: "first comment", read_at: nil, sender_deleted: false, message_id: nil, recipient_deleted: false>
irb(main):005:0> msg2.message = msg1
=> #<Message _id: 4cc7699f457601d7e8000001, created_at: nil, body: nil, updated_at: nil, subject: "new question", read_at: nil, sender_deleted: false, message_id: nil, recipient_deleted: false>
irb(main):007:0> msg1.replies << msg2
=> [#<Message _id: 4cc769b6457601d7e8000002, created_at: nil, body: nil, updated_at: nil, subject: "first comment", read_at: nil, sender_deleted: false, message_id: BSON::ObjectId('4cc7699f457601d7e8000001'), recipient_deleted: false>]
irb(main):008:0> msg1.save
=> true
person Sergio Tulentsev    schedule 26.10.2010