使用选择调用的双嵌套连接的Rails活动记录查询
我有以下架构:
照片has many
组has many
用户。
我使用这个Rails服务器作为iOS应用程序的后端,并且在添加照片时不断需要向组的所有相关用户推送通知。
我的问题是找到最便宜的查询来解决仅受影响的User.ids
。
到目前为止我有
Photo.find(1).groups.joins(:users)
我知道在此之后我必须输入一个select参数,但是无法弄清楚我生活的语法。
鉴于照片,我正在寻找最有效的方法来查找受影响的用户ID的集合。
任何帮助将非常感激!!!
users_id = [] Group.where(photo_id: 1).users.collect{|u| users_id << u.id} puts users_id
由于Photo has_many
groups,因此,groups belongs_to
photo和groups table将photo_id
作为外键。
所以,请试试这个。
在您的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。