2013-07-17 45 views
2

我有以下模式:Rails的活动记录查询双重嵌套的联接与选择呼叫

照片has manyhas many用户。

我将此Rails服务器用作iOS应用程序的后端,并且在添加照片时不断需要将通知推送给组的所有相关用户。

我的问题是找到最便宜的查询来解决只受User.ids影响。

到目前为止,我有

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

我知道我必须把一个选择参数在此之后,却无法找出语法我的生活。

给定一张照片,我正在寻找最有效的方法来查找受影响的用户标识的集合。

任何帮助将不胜感激!

+0

'Group.where(photo_id:1).users.collect {| u |把u.id}作为照片has_many组,所以groups belongs_to照片和gorups表有photo_id作为外键,所以请试试这个 –

回答

0
users_id = [] 
Group.where(photo_id: 1).users.collect{|u| users_id << u.id} 
puts users_id 

至于照片has_many群体,因此,组belongs_to照片和组表有photo_id为外键。

所以,请试试这个。

1

照片中的模型,你可以有另一种称为关联用户

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找到用户。