Ruby on rails Rails专用消息系统

Ruby on rails Rails专用消息系统,ruby-on-rails,messagebox,database-schema,has-many,Ruby On Rails,Messagebox,Database Schema,Has Many,哎,, 我正在尝试实现一个用于社交网络的消息系统。我面临的问题首先是数据库结构,其次是如何在rails中实现它。 我的第一个想法是使用3个表: 消息:id |主题|文本|创建|在 接收者:id |消息| id |读:布尔值 创建者:id |消息| id |读取:布尔值 现在我想知道如何实现以下功能: 1.)用户可以删除其邮件。但是,由于两个用户都想阅读邮件,如何确保只有在两个用户都已删除邮件时才将其删除。 2.)如何实施回复?或者实际上如何找到相应的创建者? 3.)如何确定收件人是否阅读了邮件

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

消息:id |主题|文本|创建|在
接收者:id |消息| id |读:布尔值
创建者:id |消息| id |读取:布尔值

现在我想知道如何实现以下功能:
1.)用户可以删除其邮件。但是,由于两个用户都想阅读邮件,如何确保只有在两个用户都已删除邮件时才将其删除。
2.)如何实施回复?或者实际上如何找到相应的创建者?
3.)如何确定收件人是否阅读了邮件

另一个想法是: 创建者消息:id |创建者id |接收者id |主题|文本|读取|已创建|在 接收方消息:与创建者消息相同

这区分了用户,因此他们可以单独删除他们的消息。但是我怎么才能知道,邮件是否被阅读

我的第三种方法基本上是第二种,但只有一个表消息,然后将其显示给用户。
1.一旦其中一个用户删除该消息,该消息将立即被删除。
2.事实上,我如何表达你所拥有的关系

我以为它会像这样工作:

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
但不知怎的,我没有让它发挥作用。我想我错过了一些基本的东西

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

解决方案可能是:

1) 我也会在receivers表中创建一个deleted(_at)标志,如果您真的想从数据库中硬删除消息,那么如果所有接收者都删除了它,您可以设置一个cronjob之类的东西

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

3) 我真的不明白这一点,我猜当用户打开消息时,您可以将receivers表上的“read”标志设置为“true”,然后您可以在用户模型中创建一个范围,如“scope:read,where(:read,true)”以及一个未读范围

我希望这就是你的意思。

解决方案可能是:

1) 我也会在receivers表中创建一个deleted(_at)标志,如果您真的想从数据库中硬删除消息,那么如果所有接收者都删除了它,您可以设置一个cronjob之类的东西

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

3) 我真的不明白这一点,我猜当用户打开消息时,您可以将receivers表上的“read”标志设置为“true”,然后您可以在用户模型中创建一个范围,如“scope:read,where(:read,true)”以及一个未读范围


我希望这就是你的意思。

好的,如果我理解正确,消息最多有一个接收者和一个发送者。 在这种情况下,我将执行以下操作:

我会创建一个消息模型,它会有额外的字段 -接收机读取 -已删除接收器 -已删除发件人

现在,您可以在模型中添加挂钩,如“保存后”、“创建后”。在这里,您可以通过检查receiver\u read是否已设置为true,例如,receiver\u read\u是否已更改?方法,如果这是真的,则可以通知发件人或使用它执行其他操作。 使用这个after_save hook,您还可以检查如果发送方_deleted刚刚设置为true,接收方_deleted已经为true,那么您将删除整个消息

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

好的,如果我理解正确,消息最多有一个接收者和一个发送者。 在这种情况下,我将执行以下操作:

我会创建一个消息模型,它会有额外的字段 -接收机读取 -已删除接收器 -已删除发件人

现在,您可以在模型中添加挂钩,如“保存后”、“创建后”。在这里,您可以通过检查receiver\u read是否已设置为true,例如,receiver\u read\u是否已更改?方法,如果这是真的,则可以通知发件人或使用它执行其他操作。 使用这个after_save hook,您还可以检查如果发送方_deleted刚刚设置为true,接收方_deleted已经为true,那么您将删除整个消息

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

应该是
:sent_messages
,如果另一个是
:received_messages
:)我没有尝试设置私有消息系统,但如果必须这样做,我将深入研究Inoshi代码()或检查此插件:(使用Restful身份验证)。希望它能有所帮助…嘿,为什么你想要消息的多个创建者,而不仅仅是消息模型中的创建者id?我会仔细研究代码谢谢。应该是
:sent\u messages
,如果另一个是
:received\u messages
:)我没有尝试设置私人消息系统,但如果我必须这样做,我将深入研究Inoshi代码()或检查此插件:(使用Restful身份验证)。希望它能有所帮助…嘿,为什么你希望消息有多个创建者,而不仅仅是消息模型中的创建者id?我会仔细研究代码的,谢谢。1)只有一个接收者,但只有当双方决定删除消息时,消息才能被删除