我有一个用户模型
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个视频,用户已经看过所有视频当然一个,我的查询必须返回该课程。我该如何实现呢?
答案 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
有优化的余地。您可以进一步优化