我有一个用户,成员资格和群组模型。用户拥有许多成员资格,并通过成员资格进行分组。一个组拥有许多成员资格,用户通过成员资格。会员资格属于两者。
当用户访问用户索引视图时,我想向他/她显示属于他/她所属组的所有用户:我创建了以下代码,但这不起作用。我似乎无法让查询工作。皮斯帮忙!
用户控制器中的代码
class UsersController < ApplicationController
def index
@users = current_user.relevant_members
end
end
用户模型中的代码
def relevant_members
group_ids = self.group_ids
user_ids = Membership.select("user_id").where("group_id IN (#{group_ids.join(", ")})")
User.find(user_ids)
end
我不明白为什么,在控制台中测试时,user_ids不是一个id数组,而是以下数组:
[#<Membership user_id: 2>, #<Membership user_id: 2>, #<Membership user_id: 3>, #<Membership user_id: 3>, #<Membership user_id: 3>, #<Membership user_id: 2>]
返回一组用户ID以查找所有相关组成员的更好方法是什么?
答案 0 :(得分:3)
Membership.select("user_id").where("group_id IN (#{group_ids.join(", ")})")
总是返回一个Membership对象数组,select(“user_id”)只更改从DB加载到对象的字段。
将它映射到id
就足够了user_ids = Membership.select("user_id").where("group_id IN (#{group_ids.join(", ")})").map(&:user_id)
答案 1 :(得分:1)
Membership.select('user_id')
将返回仅包含Membership
属性的user_id
个对象数组,到目前为止这是正确的。如果从结果中提取id,它将起作用:
membershipts = Membership.select("user_id").where("group_id IN (#{group_ids.join(", ")})")
user_ids = memberships.map(&:user_id)
祝你好运
托拜厄斯
答案 2 :(得分:1)
您是否尝试过pluck()函数? https://apidock.com/rails/ActiveRecord/Calculations/pluck
user_ids = Membership.pluck("user_id").where("group_id IN (#{group_ids.join(", ")})")
答案 3 :(得分:0)
这是因为您的user_ids
是类Membership
的对象,因此您无法直接获取'user_ids'的数组
您必须执行以下操作
user_ids = Membership.select("user_id").where("group_id IN (#{group_ids.join(", ")})")
user_ids_array = user_ids.collect{|u| u.user_id}
User.find(user_ids_array)
此外,您可以修改您的where子句,如下所示,这是更多的ruby方式。
user_ids = Membership.select("user_id").where(["group_id IN (?)", group_ids])
答案 4 :(得分:0)
Membership.where("group_id in (#{groups.collect(&:id).join(',')})")
.all.collect(&:user_id)