Ruby on rails RoR MongoDB阵列字段用法

Ruby on rails RoR MongoDB阵列字段用法,ruby-on-rails,arrays,mongodb,Ruby On Rails,Arrays,Mongodb,我是MongoDB新手,不确定如何使用数组字段类型 所以我在我的模型中创建了 field :admins, type: Array 在这个字段中,我想存储作为模型“管理员”的所有用户ID。但当我试图设置此字段时,它不会将信息保存在数组中,它只是简单地创建了一个ID为的字符串。由于我的限制,只有管理员才能编辑我的筛选函数 def check_if_admin unless Agency.find(params[:id]).admins.include?(current_agent.id)

我是MongoDB新手,不确定如何使用数组字段类型

所以我在我的模型中创建了

field :admins, type: Array
在这个字段中,我想存储作为模型“管理员”的所有用户ID。但当我试图设置此字段时,它不会将信息保存在数组中,它只是简单地创建了一个ID为的字符串。由于我的限制,只有管理员才能编辑我的筛选函数

def check_if_admin
  unless Agency.find(params[:id]).admins.include?(current_agent.id)
    flash[:notice] = "Only possible as Admin."
    redirect_to root_path
  end
end
获取

"can't convert Moped::BSON::ObjectId into String"
因此,我尝试将create def中的字段初始化为ID为的数组:

@agency.admins = [current_agent.id]
这对数组中的一个用户来说是个窍门,但是如何向该字段添加ID呢

当我进入编辑表单时:

<%= form_for(@agency) do |f| %>
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :admins %><br />
    <%= f.text_field :admins %>  <br />
  </div>          
  <div class="field">
    <%= f.label :agents %><br />
    <%= f.text_field :agents %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>





然后手动输入另一个用户ID,我又回到了我的错误。 有人知道怎么避开吗


非常感谢你的帮助

此消息意味着您在某个点上存储了一个字符串,其中应该有ObjectId。Ruby正在尝试将当前的_agent.id(ObjectId)与params[:id](字符串)进行比较

在将输入推送到数组之前,似乎没有将表单中的text_字段中的输入转换为ObjectID

从admins字段获取输入,并将ObjectId设置为:

BSON::ObjectId.new(string_representing_admin_id)
我猜admins字段是一个逗号分隔的admin id数组,并且您正在使用一些易于使用的id值,例如用户名而不是生成的ObjectId,因为这将非常麻烦

在这种情况下,您可能会拆分并剥离输入,然后使用map/select创建ObjectId数组

在rails中使用一个select字段来显示类似的用户名会容易得多,对吗


无论如何,如果您需要更多帮助,请展示一些样本文档。

非常感谢!它确实帮助了我。不知道我可以这样叫身份证!