【发布时间】:2018-08-27 23:03:06
【问题描述】:
我的申请是关于有很多愿望的个人资料,这些个人资料与电影相关:
class Profile < ApplicationRecord
has_many :wishes, dependent: :destroy
has_many :movies, through: :wishes
end
class Wish < ApplicationRecord
belongs_to :profile
belongs_to :movie
end
class Movie < ApplicationRecord
has_many :wishes, dependent: :destroy
has_many :profiles, through: :wishes
end
我想返回 ID 为 1、2 和 3 的个人资料所有“希望”的所有电影。
我设法使用原始 SQL (postgres) 获取此查询,但我想学习如何使用 ActiveRecord 进行此操作。
select movies.id
from movies
join wishes on wishes.movie_id = movies.id
join profiles on wishes.profile_id = profiles.id and profiles.id in (1,2,3)
group by movies.id
having count(*) = 3;
(我依赖 count(*) = 3,因为我有一个唯一索引,可以防止创建具有重复 profile_id-movie_id 对的愿望,但我愿意接受更好的解决方案)
目前我发现最好的方法是这个:
profiles = Profile.find([1,2,3])
Wish.joins(:profile, :movie).where(profile: profiles).group(:movie_id).count.select { |_,v| v == 3 }
(我也会使用 Movie.joins 开始 AR 查询,但我没有找到方法 :-)
【问题讨论】:
标签: ruby-on-rails activerecord rails-activerecord