【问题标题】:Rails Active Record Query for Double Nested Joins with a Select Call使用 Select 调用的双嵌套联接的 Rails 活动记录查询
【发布时间】:2013-07-17 04:24:21
【问题描述】:

我有以下架构:

照片has many 群组has many 用户。

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

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

目前为止

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

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

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

任何帮助将不胜感激!!!

【问题讨论】:

  • Group.where(photo_id: 1).users.collect{|u| puts u.id} as Photo has_many groups so groups belongs_to photo and gorups table has photo_id 作为外键所以请试试这个

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


【解决方案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。

【讨论】:

    【解决方案2】:
    users_id = []   
    Group.where(photo_id: 1).users.collect{|u| users_id << u.id}  
    puts users_id
    

    由于照片has_many 组,所以,组belongs_to 照片和组表具有photo_id 作为外键。

    所以,请试试这个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多