【问题标题】:Iterator returning an extra object for Mongoid documents迭代器为 Mongoid 文档返回一个额外的对象
【发布时间】:2012-12-31 03:45:20
【问题描述】:

使用 Rails 和 Mongoid。

把代码写下来解释会更容易:

foo = User.all.to_a

尝试在我的 Javascript 中格式化为可接受的数据。但在我的迭代中:

var dump = []
<%= foo.each do |boop| %>
   dump.push( /*some formatted data using boop/*)
<% end %>

结果转储包含可接受的格式,除了文档对象也添加到数组的末尾。

例如,使用 rails 控制台:

foo.each do |boop|
   print "#{boop.email}\n"
end

打印出电子邮件。然后在最后,在一行中打印出每个文档对象。

我直接从上面的输出:

hobbes203@gmail.com
...
// Prints out emails until end

[#<User _id: 50edd7fe021823ea20000001, _type: nil, email: "hobbes203@gmail.com", password_digest: "$2a$10$xXixV8MlqGco0Qq7j5jQaOkXBWQ9cLgQ7yEOtQruxq.HiYg8GOJ4y", phone: nil, firstName: nil, lastName: nil, employNum: nil, dateMade: nil, role_id: "50edd7da021823db20000001">, ... #prints out rest of users in line.

db 中的数组大小和计数相同。我还使用 last 检查了数组。我正在考虑通过仅获取数组的长度来使用计数迭代器,但我很好奇为什么会发生这种情况。

【问题讨论】:

    标签: ruby-on-rails ruby iterator mongoid


    【解决方案1】:

    您看到的打印输出是操作的返回值。例如。

    > Object.save 
    => true
    

    您可以通过在块结束后传递“;0”来抑制这一点,它仍然会打印输出但会将返回值更改为零。

    foo.each {|boop| puts "#{boop.email}\n" };0
    

    【讨论】:

    • 好的,所以在上面没有打印的情况下,push 方法会在将返回值更改为 0 之前获取操作的返回值。还有其他方法吗?
    • ";0" 提示仅用于在控制台中进行调试。如果那是为了混淆,我深表歉意。如果您只是想让您的 foo 对象成为 Javascript 可接受的格式。您应该将其更改为 JSON 对象。 :)
    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多