我希望用户能够发送和接收消息并在收件箱中查看它们,类似于在Facebook中完成的方式:它显示主题并知道是否收到或发送了特定消息,然后单击显示整个线程。
我一直在尝试使用带有UserMessage的单个Message记录 - 一个用于发件人,另一个用于收件人 - 但不完全确定如何,例如,显示用户的所有邮件是否收件人或发件人。
理想情况下,有人已经在插件或宝石中完成了这项工作,我可以重新调整用途。
答案 0 :(得分:0)
这对你来说不是一项非常困难的任务。我们希望能够在用户之间发送消息。假设我们有一个User
模型看起来像(为了简单起见)
create_table "users", :force => true do |t|
t.string "username", :null => false
t.string "hashed_password", :null => false
t.datetime "created_at"
t.datetime "updated_at"
t.string "salt", :null => false
end
和Message
模型看起来像(为了简单起见)
create_table "messages", :force => true do |t|
t.string "subject", :null => false
t.integer "sender_id"
t.integer "recipient_id"
t.datetime "created_at"
t.datetime "updated_at"
end
和Msgcontent
模型看起来像
create_table "msgcontents", :force => true do |t|
t.string "body", :null => false
t.integer "message_id"
t.integer "sender_id"
t.datetime "created_at"
t.datetime "updated_at"
end
现在您已经设置了这些模型,在控制器中可能会有类似的内容。
def show_all_messages
@sent_messages = Message.find_all_by_sender_id(params[:user_id])
@received_messages = Message.find_all_by_recipient_id(params[:user_id])
end
def show_message_detail
@thread = Msgcontent.find_all_by_message_id(params[:message_id])
end
当前用户已登录params[:user_id]
,params[:message_id]
是您要详细显示的消息。您也可以将2个变量组合成一个变量,但是您可能希望将它分开,这取决于您。这样,在您的视图中,您可以适当地显示用户已发送和接收的所有消息。我不打算编写一个完整的代码视图,但基本上有show_all_messages
获取用户所属的所有消息,而show_message_detail
将获取消息的整个线程。我将把这部分留给你:)
如果您希望能够判断用户是否看过该消息,您可以在Message
模型中添加2个字段,然后将其转换为
create_table "messages", :force => true do |t|
t.string "subject", :null => false
t.integer "sender_id"
t.integer "recipient_id"
t.datetime "sender_lastviewed", :null => false
t.datetime "recipient_lastviewed", :null => false
t.datetime "created_at"
t.datetime "updated_at"
end
现在,您将知道发件人或收件人查看邮件的最后日期。在show_all_messages
中,您需要更新Message
模型,以反映您添加到表格中的两列。然后,为了能够在_lastviewed
之后获取您需要在代码中使用条件的消息,可以找到here
如果你真的想找到一个宝石,你可以用一些勤奋的谷歌搜索,但是这里有一些非常基本的Rails(和数据库)概念,如果你想要依赖自己的知识,这对你来说是必不可少的为了未来的发展。
答案 1 :(得分:0)
has_mailbox
gem
是否在用户之间发送消息,我正在我的示例项目上测试它:) 并且不要忘记在gem文件中添加will_paginate gem因为现在ha_mailbox gem显示错误incase will_paginate不在gem文件中。我认为这取决于它