def resolve(where: {}, order_by: {'field': 'updated_at', 'direction': 'desc'})
order_by.symbolize_keys!
[context[:current_user]] unless context[:current_user].has_capability?(self.class.name.demodulize)
cap_belongs_to = context[:current_user].determine_capability_belongs_to(self.class.name.demodulize)
users = if cap_belongs_to[:direct] || context[:current_user].user_type == 'SuperAdmin'
context[:tenant].users.includes([:groups, :roles]).where(where).order("#{order_by[:field]} #{order_by[:direction]}")
elsif cap_belongs_to[:group].present?
context[:tenant].groups.where(cap_belongs_to['group']).map(&:users).flatten
else
[context[:current_user]]
end
stored_user_contents = (UserContent.select("DISTINCT ON (user_id) user_contents.*"))
users.to_a
missing_user_content_ids = users.ids - stored_user_contents.pluck(:user_id)
missing_user_contents = missing_user_content_ids.map do |user_id|
UserContent.new(user_id: user_id, on_fly: true)
end
在上面的代码中如果我删除
users.to_a
从代码中我得到了
[#
如何解决上面的问题,下面是我的 graphql 查询
预期是有效的结果,但我的代码中出现错误..
query usersaa {
users {
totalCount
edges {
node {
id
fullName
firstName
lastName
userType
email
deletedAt
createdAt
updatedAt
profileImageUrl
unconfirmedEmail
courses {
edges {
status
node {
id
title
}
}
}
}
}
}
}
您遇到的错误,特别是“PG::AmbigouslyColumn”错误,是因为由于删除了 users.to_a 而由 ActiveRecord 生成的 SQL 查询中存在歧义。当您调用 users.to_a 时,它会强制执行查询并从数据库中获取结果。如果没有它,ActiveRecord 仍在构建查询,当您尝试直接从用户关系中 pluck(:id) 时,它无法确定要使用的正确列。
要解决此问题,您可以在使用 pluck(:id) 之前显式调用 to_a 或执行查询,如下所示: