使用选择调用的双嵌套连接的Rails活动记录查询

时间:2013-07-17 04:24:22

标签: sql ruby-on-rails activerecord arel activerecord-relation

我有以下架构:

照片has many群组has many用户。

我使用这个Rails服务器作为iOS应用程序的后端,并且在添加照片时不断需要向组的所有相关用户发送通知。

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

到目前为止我已经

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

我知道在此之后我必须输入一个select参数,但是无法弄清楚我生活的语法。

鉴于照片,我正在寻找最有效的方法来查找受影响的用户ID的集合。

任何帮助都将非常感谢!!!

2 个答案:

答案 0 :(得分:1)

在Photo模型中,您可以拥有另一个名为users

的关联
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。

答案 1 :(得分:0)

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

作为照片has_many群组,因此,群组belongs_to照片和群组表格已将photo_id作为外键。

所以,请试试这个。