设计用于在模型之间发送消息的私人消息系统

时间:2016-02-24 16:05:21

标签: ruby-on-rails

我正在尝试在rails中创建一个消息传递系统,使用户能够将消息发送到列表。一旦他们点击发送消息,就会在用户和列表之间创建新的对话。因此,对话始终只有2个用户。

这是基本设置

User has_many Listings

Listing belongs_to User

如上所述添加私人消息系统我的计划如下

Conversation has_many Messages

Message belongs_to Conversation

listing has_many conversation

user has_many conversation

conversation belongs_to listing

conversation belongs_to user

我从未做过这么疯狂的事情。我有一种感觉,有另一种更好的方法来做到这一点或过度使用它。我知道如果它在两个用户之间我很容易创建消息,但是作为一个用户可以有很多列表,我希望每个列表都有不同的对话(所以基本上是在用户和列表之间进行对话),即使是来自同一个所有者。有人可以说明在这种情况下采用哪种方法进行架构设计?

2 个答案:

答案 0 :(得分:1)

我建议使用has_many来进行对话:

用户has_many列表

列出belongs_to用户

Conversation belongs_to Listing

Conversation has_many消息

消息belongs_to会话

列出has_many对话

UserA has_many对话,通过:listing,class:User

UserB has_many对话,通过:listing,class:User

当然,想到UserA和UserB的更好名称会很好,但发件人/收件人确实不起作用。

答案 1 :(得分:1)

它看起来很好,它有效吗?

一个问题:用户之间是否会存在对话?如果是这样,您可能需要对对象进行预测性命名,例如: ListingUserConversation