Rails 3. 按匹配次数排序(多对多)

2024-02-01

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

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

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

提前致谢。


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

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

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")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 3. 按匹配次数排序(多对多) 的相关文章

随机推荐