我正在轨道4上创建一个简单的聊天应用程序。控制器,模型和视图已创建,但功能仍不完整。我在我的数据库中有两个表格,会话和消息。会话表包含两个字段,发件人ID和收件人ID。消息表包含3个字段,正文,用户标识和读取(默认为0,表示不读取)。未读消息计数器
型号:
class Conversation < ActiveRecord::Base
belongs_to :sender, :foreign_key => :sender_id, :class_name => "User"
belongs_to :reciever, :foreign_key => :reciever_id, :class_name => "User"
has_many :messages, :dependent => :destroy
validates_uniqueness_of :sender_id, :scope => :reciever_id
scope :involving, lambda { |user_id|
where("sender_id = ? OR reciever_id = ?", user_id, user_id)
}
scope :between, lambda { |sender_id, reciever_id|
where("(sender_id = ? AND reciever_id = ?) OR (sender_id = ? AND reciever_id = ?)", sender_id, reciever_id, reciever_id, sender_id)
}
def other_interlocutor(user_id)
if sender.id == user_id
return reciever.id
else
return sender.id
end
end
end
class Message < ActiveRecord::Base
belongs_to :conversation
belongs_to :user
validates_presence_of :conversation_id, :user_id, :body
end
我所要做的就是创建接收未读邮件的实时功能计数,每当有人收到新的消息。我正在使用私人酒吧来创建用户之间的聊天。
我有一个包含此功能的用户模式:
def unread_messages_count
unread_messages = 0
# puts "Putting self conversations ! #{self.conversations.first}"
conversations = Conversation.involving(self.id)
conversations.each do |conversation|
unread_messages += conversation.messages.where(:read => 0, :user_id => conversation.other_interlocutor(self.id)).count
end
return unread_messages = unread_messages == 0 ? nil : unread_messages
end
我有一个页面,所有用户的通话列和一个对话被点击所有与该对话的信息都被列出了。在同一页上,我订阅了每个conversation_messages_path
为每个对话创建单独的频道。每当一个消息被发送一个create.js.erb
文件呈现在我发布这些订阅的频道:
<% publish_to conversation_messages_path(@conversation.id) do %>
$("#conversations_link").text("<%= current_user.unread_messages_count %> Conversations");
$("#messages").append("<%= escape_javascript render(:partial => 'message', :locals => { :message => @message })%>");
<% end %>
的$("#conversation_link")
是我想要显示的未读邮件数。
当前,未读邮件数正在返回错误计数,并且导航栏仅在conversation.sender_id
消息接收方更新。
我的未读消息计数器未返回正确数量的未读消息。我不知道如何解决它。我的代码有什么问题? 谢谢。
“我的代码出了什么问题,我应该怎么做才能使这件事情起作用?”作为一个问题陈述,这个陈述非常模糊和不具描述性。与其倾倒大量的大量代码,不如试图将问题孤立于可以切实解决的问题上? – MarsAtomic
@MarsAtomic所有代码都是必需的,以便了解我的应用中发生了什么。 –