Rails 3.按比赛数量排序(多对多)

时间:2013-05-30 10:59:48

标签: ruby-on-rails many-to-many match

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

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)。

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

提前致谢。

1 个答案:

答案 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")