用于从多个嵌套记录加载记录的复杂查询

时间:2015-01-02 08:26:25

标签: mysql ruby-on-rails activerecord

我有一个用户模型

class User < ActiveRecord::Base
  has_many :watched_videos
  has_and_belongs_to :course
end

和课程模型

class Course < ActiveRecord::Base
  has_many :videos      
  has_and_belongs_to :users
end

和视频模型

class Video < ActiveRecord::Base
  belongs_to :course
  has_many :watched_videos      
end

和我看过的视频模型看起来像

class WatchedVideo < ActiveRecord::Base
  belongs_to :user
  belongs_to :video      
end

我希望用户可以查看所有视频的所有课程。例如。有两个课程,每个视频有2个视频,用户已经看过所有视频当然一个,我的查询必须返回该课程。我该如何实现呢?

1 个答案:

答案 0 :(得分:0)

首先让所有观看过任何视频的用户:

users = WatchedVideo.pluck('Distinct("user_id")')

获取所有具有以上用户的课程:

courses = Course.includes(:videos).where('user_id in (?)', users)

对课程进行迭代,以查找所有观看视频的课程:

cour = []
courses.each do |c|
 c.users.each do |u|
  cour << c if u.wathced_videos.pluck(:video_id) == c.videos.pluck(:id)
 end
end

有优化的余地。您可以进一步优化