文档集合中的进程哈希Mongoid

时间:2014-04-28 06:14:23

标签: ruby-on-rails mongodb hash mongoid3

我有一个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

1 个答案:

答案 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)?