Внедрение ответов на сообщения в родительском сообщении с помощью mongodb с использованием mongoid - PullRequest
1 голос
/ 25 октября 2010

Я думаю, что лучше всего встраивать ответы в определенное сообщение внутри этого сообщения, и я пытаюсь реализовать его с помощью 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

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

1 Ответ

3 голосов
/ 27 октября 2010

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

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

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

на

  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
...