为什么返回的对象是Enumerable?

时间:2016-08-08 14:58:45

标签: ruby object sinatra

我不明白为什么我会得到一个Enumerable而不是一个对象。当我运行此代码时:

 - @posts.each do |post|
    = Comment.find(id: post.id).title

我发现了这个错误:

  

未定义的方法`标题'对于#Enumerator:评论:find({:id => 1})>

如果我在控制台办理登机手续,我也会得到枚举器:

[2] pry(#<Sinatra::Application>)> Comment.find 1
 => #<Enumerator: ...>

我只想拥有像#<Comment @id=1 @content="great" @post_id=1>

这样的对象

我正在与Sinatra和Datamapper合作。

1 个答案:

答案 0 :(得分:1)

您正在寻找的查询是:

Comment.first(id: post.id).title

以下是:

的简短版本
Comment.all(id: post.id).first.title

Datamapper中没有find(我知道)。你实际看到的是Ruby的Enumerable#find:http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-find的结果,它必须是Datamapper对象的一部分。