Вы не показали код для моделей, поэтому я сделал несколько предположений. Вот один из способов:
class Conversation < ActiveRecord::Base
belongs_to :group
has_many :conversation_participants
has_many :participants, :through => :conversation_participants,\
:source => :user
scope :unread, lambda { |user,group| includes(:group,:conversation_participants).\
where(:group_id => group.id,\
:conversation_participants => {:read => false,:user_id => user.id})
}
end
Вы запрашиваете "непрочитанные разговоры, принадлежащие определенному пользователю и группе". Поскольку запрашиваемая вещь - это набор бесед, это естественное место для определения области действия.
EDIT
Я вижу, вы хотели счетчик, а не набор результатов. Просто добавьте .count
в область действия:
Conversation.unread(user,group).count
РЕДАКТИРОВАТЬ 2
можно ли сделать что-то вроде
вместо этого, чтобы получить #,
current_user.unread (group) .count ..?
Добавить метод экземпляра для пользователя:
def unread(group)
Conversation.unread(self,group)
end
Теперь вы можете звонить current_user.unread(group).count