【发布时间】: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