为什么选择 Ruby on Rails?可枚举显示计数为 3,但“.each”为 3。仅打印项目 1 次

发布于 2024-09-18 20:28:06 字数 595 浏览 7 评论 0原文

我有一个

使用 HAML 从 Mongoid(MongoDB 对象映射器)返回的 Enumerable 对象:

= @employees.count       
= @employees.class

- @employees.each do |e|
  =h e.inspect

计数显示 3 该类显示 Enumerable::Enumerator 但只有 1 项被打印出来,

该对象在控制器中返回,使用

@employees = Employee.limit(3).where({:_id.gte => startID.to_i})

If I Change

- @employees.each do |e|

to

- @employees.to_a.each do |e|

then 它会打印出所有 3 项,但为什么 Enumerable 方法会失败?如果我尝试在 Rails 控制台中使用 p e 它实际上会打印出 3 个项目。

I have a Enumerable object returned from Mongoid (MongoDB object mapper)

using HAML:

= @employees.count       
= @employees.class

- @employees.each do |e|
  =h e.inspect

the count shows 3
the class shows Enumerable::Enumerator
But only 1 item is printed out

the object is returned in the controller using

@employees = Employee.limit(3).where({:_id.gte => startID.to_i})

If I change

- @employees.each do |e|

to

- @employees.to_a.each do |e|

then it prints out all 3, but why will the Enumerable method fail? If I try in rails console using p e it actually prints out 3 items.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

就像说晚安 2024-09-25 20:28:10

我猜 @employees 并不懒惰,但这是你的 haml 的问题。

尝试在 haml 中执行相当于此操作:

<ul>
= @employees.map { |e| "<li>" + e.inspect + "</li>" }.join
</ul>

好的,只需阅读一些 haml 文档,这对您有用吗?

- @employees.each do |e|
    %p= h e.inspect

I'm guessing that @employees is not lazy, but that it's a problem with your haml.

Try doing the equivalent of this in haml:

<ul>
= @employees.map { |e| "<li>" + e.inspect + "</li>" }.join
</ul>

Ok, just read through some haml docs, does this work for you?

- @employees.each do |e|
    %p= h e.inspect
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文