我有一个Web应用程序,我将用户类型存储为哈希字段。我有很多收藏品。什么是处理该哈希字段的最佳方式。
class Community
include Mongoid::Document
class UserRoles
Admin = :a
Moderator = :m
end
include Mongoid::Timestamps
field :un, as: :username, type: String
field :nm, as: :name, type: String
field :suids, as: :special_user_ids, type: Hash
has_and_belongs_to_many :users
end
现在可以有许多社区,拥有许多用户,每个用户都有许多主持人。因此,对于特殊用户,我将其存储为哈希。
现在我如何计算当前已登录的用户是否是任何社区的主持人/管理员
我试过这个,显然这不起作用。如果我有一个单独的文件要处理,它会工作。而我的解决方案并没有达到为什么首先使用哈希的目的。
# suids = []
# @communities = Community.all
# suids << @community.special_user_ids.collect { |k, v| k }
# //code doesnt find special_user_ids as it has too many documents to deal with.
# communities_path(@community.id)
我有一个工作代码可以找到给定社区的所有管理员/管理员。
def admins
@community = Community.find(params[:id])
@users = User.where(:id.in => @community.special_user_ids.collect { |k, v| k })
end
答案 0 :(得分:1)
对于所需社区的管理员,您可以
if admins.include?(current_user)
# treat as admin
end
修改强>
all_admins = Array.new
获取所有社区
@communities = Community.all
@communities.each do |c_comm|
all_admins.concat(User.where(:id.in => c_comm.special_user_ids.collect { |k, v| k }))
end
puts all_admins.include(current_user)?