2

我有两个模型之间的多对多关联:

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

我有一个按作品过滤,包含几个作品(id)。

我的任务是按作品过滤用户并按匹配数排序。

提前致谢。

4

1 回答 1

2

我想你需要按作品分组,按数量排序

这就是如何从更少的作品到更多的排序:

User.joins(:works).group("user_works.user_id").order("COUNT(*)") 

这就是如何从更多作品到更少作品进行排序:

User.joins(:works).group("user_works.user_id").order("COUNT(*) DESC") 

更新。 如果您想进行一些额外的过滤,只需添加 where 子句

User.joins(:works).where("user_works.work_id in #{filter_string}").group("user_works.user_id").order("COUNT(*) DESC")
于 2013-05-30T11:36:52.560 回答