【问题标题】:Create multiple documents with array使用数组创建多个文档
【发布时间】:2013-02-25 21:09:12
【问题描述】:

我有以下数组:

@unregistered_users = ['my@email.com', 'your@email.com', ...]

现在,我想为每个数组元素创建一个文档:

@unregistered_users.each do |email_address|
  Model.create(email: email_address, user: self.user, detail: self)
end

但它只创建一个文档(数组的第一个元素)。根本不创建其他数组元素。为什么?

我们正在使用 Ruby 1.9.3-p385、Rails 3.2.12、MongoID 3.0.0 和 MongoDB 2.2.3

更新 #1

因此,我们有一个自定义的 _id 字段,其中包含使用 SecureRandom.hex(64).to_i(16).to_s(36)[0..127] 的自定义随机令牌。

在我删除后它可以正常工作,但使用常规的 mongo ID(这不是我们想要的)。

更新 #2

这是生成令牌的方式:

class Model
  include Mongoid::Document
  include Mongoid::Timestamps

  ...
  field :_id, default: SecureRandom.hex(64).to_i(16).to_s(36)[0..127]
  ...

  index( { _id: 1 }, { unique: true } )
end

【问题讨论】:

  • 您是否遇到任何错误?日志中有什么有趣的东西吗?您是否有可能导致迭代失败的 uniqueness 验证?
  • 也许数组的内容不是您所期望的,您是否尝试过例如@unregistered_users.each {|u| puts u}。
  • @jesper,没有错误。我在Model 课程上有一个uniqueness。因为是自定义的 mongo ID:index( { _id: 1 }, { unique: true } )/ 实际上我已经记录了 @unregistered_users 并且具有预期的内容。
  • 你试过在rails console中运行同样的代码吗?
  • @jesper,是的,得到了​​相同的结果。它只创建第一个元素。

标签: ruby-on-rails ruby mongodb mongoid


【解决方案1】:

尝试这样的方法来检查 mongoid 模型上的错误:

@unregistered_users.each do |email_address|
  model = Model.create(email: email_address, user: self.user, detail: self)
  puts model.errors.inspect unless model.persisted?
end

或使用create! 引发异常并查看发生了什么

【讨论】:

  • 仍然有相同的结果:只创建一个文档。
  • 但是,你没有任何消息吗?
  • @betacar 你能发布你的 mongoid.yml 和模型代码吗?你也可以试试这样的:Model.with(safe: true).create(<your params>)
  • @betacar 我刚刚阅读了您的更新#1,请分享您的Model 代码,您如何设置自定义_id?
  • 埃德加,完成。我不得不剔除其他不相关的领域和关系。
猜你喜欢
  • 2020-10-08
  • 2013-03-02
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多