用户拥有主要类别和多个子类别
我希望获得属于某个类别的所有用户,无论他们是主要用户还是子用户。
@users = User.joins(:sub_categories).where('sub_category_id = ? OR type = ?', @sub_category.id, "User::#{category}User").page(params[:page])
用户的主要类别也是他们的STI类型。
查询有效,但是在尝试包含用户的主要类型时,我得到重复的结果。
生成的查询是:
User Load (0.0ms) SELECT "users".* FROM "users" INNER JOIN "user_sub_categories_users" ON "user_sub_categories_users"."user_id" = "users"."id" INNER JOIN "user_sub_categories" ON "user_sub_categories"."id" = "user_sub_categories_users"."sub_category_id" WHERE "users"."deleted_at" IS NULL AND (sub_category_id = 1 OR type = 'User::ModelUser') ORDER BY "users"."created_at" DESC LIMIT 20 OFFSET 0
编辑:如果用户的主要用户不能属于子类别,那么将两个条件简单地加在一起是安全的
答案 0 :(得分:2)
由于每个用户都有多个组,因此您的联接会为每个用户创建多个行,例如:
User Group
-------|------
UserA |GroupA
UserA |GroupB
UserB |GroupA
UserC |GroupA
UserC |GroupB
三个用户,但五行!
如果您只对不同的用户感兴趣,可以在查询末尾安全地添加.uniq
。在ActiveRecord查询的上下文中,.uniq
将转换为SQL DISTINCT()
。