をあなたはモデルのコードを示さなかったので、私はいくつかの仮定をしました。 1つの方法があります:
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
を追加:2
Conversation.unread(user,group).count
EDITは#、 current_user.unread(グループ).countを取得する代わりに このような何かをすることが可能です。.. ?
ユーザーのインスタンスメソッド追加:
def unread(group)
Conversation.unread(self,group)
end
を今、あなたは、任意の1 current_user.unread(group).count
を呼び出すことができますか?紛らわしいのですか? – AnApprentice