0

我是 MongoDB 新手,不确定如何使用 Array-Field-Type。

所以我在我的模型中创建

field :admins, type: Array

在这个字段中,我想存储所有作为模型“管理员”的 user_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 %>

并手动输入另一个 User_ID,我又回到了我的错误。任何人都知道如何解决这个问题?

非常感谢您的帮助!

4

1 回答 1

0

此消息意味着您在某些时候存储了一个字符串,该字符串应该有一个 ObjectId。Ruby 正在尝试将 current_agent.id(一个 ObjectId)与 params[:id](一个字符串)进行比较。

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

从 admins 字段中获取输入并使 ObjectId 如下所示:

BSON::ObjectId.new(string_representing_admin_id)

我猜 admins 字段是一个逗号分隔的 admin _id 数组,并且您正在使用一些易于使用的 _id 值,例如用户名而不是生成的 ObjectId,因为使用起来会非常麻烦。

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

在rails中使用显示用户名的选择字段会容易得多,对吧?

无论如何,如果您需要更多帮助,请显示集合中的一些示例文档。

于 2012-09-04T19:53:59.693 回答