我是MongoDB的新手,并且不确定如何使用Array-Field-Type。
所以我在我的模型中创建了
field :admins, type: Array
在此字段中,我想存储所有属于模型“管理员”的user_ids。但是当我尝试设置这个字段时,它不会保存数组中的信息,它只是简单地创建一个带有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,我又回到了我的错误。 任何人都知道怎么解决这个问题?
非常感谢你的帮助!
答案 0 :(得分:0)
此消息表示在某些时候您存储了一个应该有ObjectId的字符串。 Ruby试图将current_agent.id(一个ObjectId)与params [:id](一个字符串)进行比较。
在将输入推送到数组之前,您似乎没有将输入从表单中的text_field转换为ObjectID。
从admins字段中获取输入,并使ObjectId像这样:
BSON::ObjectId.new(string_representing_admin_id)
我猜管理员字段是逗号分隔的admin _ids数组,并且您正在使用一些易于使用的_id值,例如用户名而不是生成的ObjectId,因为这会非常繁琐与之合作。
在这种情况下,你可能会拆分并剥离输入,然后使用map / select创建一个ObjectIds数组。
使用在rails中显示用户名的选择字段会更容易吗?
无论如何,如果您需要更多帮助,请展示集合中的一些示例文档。