2010-10-25 2 views
1

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

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

ответ

3

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