我有两个模型之间的多对多关联:
class User < ActiveRecord::Base
has_many :user_works
has_many :works, through: :user_works
end
class UserWork < ActiveRecord::Base
belongs_to :user
belongs_to :work
end
class Work < ActiveRecord::Base
has_many :user_works
has_many :users, through: :user_works
end
我有一个按作品过滤,包含多个作品(ids)。
我的任务是按作品过滤用户,并按匹配次数排序。
提前致谢。
答案 0 :(得分:2)
我猜你需要按作品分组,并按计数
这是如何从较少的作品到更多的作品:
User.joins(:works).group("user_works.user_id").order("COUNT(*)")
这是如何从更多作品中分类到更少:
User.joins(:works).group("user_works.user_id").order("COUNT(*) DESC")
<强> UPD。强> 如果你想要一些额外的过滤,只需添加where子句
User.joins(:works).where("user_works.work_id in #{filter_string}").group("user_works.user_id").order("COUNT(*) DESC")