2

次のスキーマがあります。

写真has manyグループのhas manyユーザー。

私はこの Rails サーバーを iOS アプリケーションのバックエンドとして使用しており、写真が追加されたときに、グループに関係するすべてのユーザーに常に通知を送信する必要があります。

私の問題は、影響を受けるものだけを解決するための最も安価なクエリを見つけることUser.idsです。

これまでのところ、

    Photo.find(1).groups.joins(:users)

この後にselect引数を入れなければならないことはわかっていますが、私の人生の構文を理解することはできません。

写真が与えられた場合、影響を受けるユーザー ID のコレクションを見つける最も効率的な方法を探しています。

どんな助けでも大歓迎です!!!

4

2 に答える 2

1

Photo モデルでは、ユーザーと呼ばれる別の関連付けを持つことができます

has_many :group_users, :through => :groups, :source => :users

次に、次のコードでユーザーを見つけることができます

@photo = Photo.includes([:group_users]).where("photos.id = ?", 1).first
@affected_users = []
@photo.group_users.map {|user| @affected_users << user.id}

これで、@affected_usersすべてのユーザー ID が含まれるようになりました。

于 2013-07-17T05:03:51.957 に答える
0
users_id = []   
Group.where(photo_id: 1).users.collect{|u| users_id << u.id}  
puts users_id

写真has_manyのグループと同様に、グループのbelongs_to写真とグループのテーブルはphoto_id外部キーとして持っています。

だから、これを試してみてください。

于 2013-07-17T05:03:35.587 に答える