Rails私人消息系统

问题描述:

嘿, 我试图实现社交网络中使用的消息系统。我面临的问题首先是关于数据库结构,其次是如何在rails中实现它。
我的第一个想法是我使用3个表:Rails私人消息系统

消息:ID |主题|文| created_at
接收器:ID | MESSAGE_ID |阅读:布尔
创:ID | MESSAGE_ID |阅读:布尔

现在我想知道如何实现以下功能:
1)用户可以删除他的消息。但是因为两者都希望阅读该消息,所以如何确保只有当两个用户都删除了该消息时才会删除该消息。
2.)我如何实现答复?或者实际上我如何找到相应的创作者?
3.)如何找出邮件是否被接收者读取?

另一个想法是: creator_messages:ID | creator_id | receiver_id |主题|文|阅读| created_at receiver_messages:同creator_messages

这种区分之间的用户,这样他们就可以单独删除他们的消息。但是我怎么知道邮件是否被读取?

我的第三种方法基本上是我的第二个,但只有一个表消息,然后显示给用户。
1.只要有一个用户删除它,邮件就会被删除。
2.实际上,我如何将关系表示为has_many并且属于?

我认为它会像这样工作:

model User 
    :has_many :send_messages, :class_name=>"messages", :foreign_key=>"creator_id" 
    :has_many :received_messages, :class_name=>"messages", :foreign_key=>"receiver_id" 
end 

model Messages 
    belongs_to :user 
end 

但不知何故,我没有得到它的工作。猜我在这里错过了一些基本的东西。

希望有人能帮助我=)非常感谢

+0

它应该是':sent_messages',如果其他是':received_messages' :) – 2011-02-24 10:22:55

+0

我没有尝试建立一个私人消息系统,但是如果我必须这样做,我会深入到这个代码中https://github.com/insoshi/insoshi)或者检查这个插件:https://github.com/professionalnerd/simple-private-messages(使用Restful Authentication)。希望它可以帮助... – benoitr 2011-02-24 11:28:37

+0

嘿,为什么你想要消息模型中的多个创建者的消息,而不仅仅是creator_id? – 2011-02-24 11:33:05

好吧,如果我理解正确的消息将有最多1个接收器和1个发件人。 在这种情况下,我会做到以下几点:

我将只创建一个信息模型,这将有额外的领域 - receiver_read - receiver_deleted - sender_deleted

现在你可以添加挂钩像模型“after_save”,“after_create”在这里,你可以通过receiver_read_changed等来检查receiver_read是否已经被设置为true。方法,如果这是真的,你可以通知发件人或做一些其他的事情。 有了这个after_save挂钩,你还可以检查,如果sender_deleted设置为true,并且receiver_deleted已经为true,那么你将删除整个消息。

当您有多个接收器时,我会为接收器创建一个连接模型,并在消息模型中包含sender_deleted和sender_id。 在连接模型中,我将添加列receiver_id,读取和删除。 现在,我将在消息和连接模型上使用before_save方法来检查是否需要删除消息,或者是否必须通知发件人已读取消息。

+0

非常感谢这个删除工作 – Jan 2011-02-24 13:41:56

的解决方案可能是:

1)我将创建一个接收器表中删除(_at)标志为好,如果你真的想如果所有的接收器都删除了它,你可以硬删除数据库中的消息,你可以设置一个cronjob或其他东西。

2)在消息模型中有一个creator_id而不是创建者表,我的意思是多个人如何创建相同的消息?

3)我真的没有得到这个,我猜你设置接收器表上的“读”标志为“真”,当用户打开信息时,在此之后,你可以在用户范围内模型如“scope:read,where(:read,true)”,并且范围未读。

我希望这是你的意思。

+0

1)只有一个接收者,但是只有在两者都决定删除时才能删除该消息2)至少对于第一种方法来说这是真的3)是的,我设置了readflag,但是如何通知创建者该消息是否被读取? – Jan 2011-02-24 12:22:43