Sinatra路由返回枚举器而不是json对象

时间:2012-06-10 13:16:09

标签: json sinatra ruby-datamapper

我试图在sinatra路线中做以下事情:

get '/posts/:id' do
  Post.find(params[:id]).to_json
end

但是这会返回一个枚举器。

如何以json格式访问单个对象?

PS我正在使用datamapper

修改

我设法通过使用 get 而不是 find 来返回json值:

get '/posts/:id' do
  Post.get(params[:id]).to_json
end

如果有人能解释为什么我会接受答案,以免浪费这个问题:)

2 个答案:

答案 0 :(得分:0)

DataMapper中不存在

find。它是Ruby的Enumerable方法,它返回一个枚举器对象;您正尝试将其转换为JSON。

DataMapper对象显然实现了Enumerable,这就是为什么你没有得到未定义的方法异常的原因。

可数#find:http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-find

答案 1 :(得分:0)

Find方法返回枚举数而不是条目。 如果您只期望一个条目:试试这个

Post.first(params[:id]).to_json