我想根据用户的类型显示用户,所以在用户概述页面上我有三个标题:管理员/版主/成员。在每个标题下,我显示了属于该组的用户。所以我查询user_type并找到属于这个组的所有用户。
每个人都在某个公司工作。我正在创建一个过滤器,使用ransack来过滤该公司:
= f.input :users_company_id_in, collection: Company.order(:name), label: 'Company'
在我的控制器中,我像这样使用ransack:
def index
@q = UserType.includes(:users, :active_users).ransack(params[:q])
@user_types = @q.result(distinct: true)
end
因为在我看来,我是通过使用@user_types.users
获取用户的,所以这个查询不考虑ransack参数,所以我看到的是每个类别的所有用户,每个类别都有人为该公司工作。
我试图实现的显然是只看到为特定公司工作的用户,并且只显示特定的user_type,如果过滤后该类别中有人的话。
如何实现这一点有什么想法吗?
1条答案
按热度按时间kqqjbcuj1#
我在一个项目中遇到了类似的问题。以下是您需要采取的大致步骤:
在控制器中,将index操作更改为:
这将告诉Ransack搜索
users
,而不是user_types
。在您看来,将获取用户的代码更改为:
这将通过在参数中传递的公司ID过滤用户。
如果你想在过滤后只显示某个
user_type
,如果类别中有人,你可以用before过滤器来做到这一点:Ruby这个before过滤器将检查用户是否在参数中指定了
user_type
ID。如果有,它将通过该ID查找user_type
,并检查是否有任何该类型的用户。如果没有该类型的用户,它将 Flink 一条警报消息并将用户重定向到用户页面。