2

在我的 API 中,我通过以下方式将 ActiveRecord 对象转换为 json:

user.to_json :methods => :new_messages

使用 irb,当我执行此语句时,我得到:

{someAttr: someValue, ....}

这是完美的。这是一个单一的对象,所以它没有被包裹在一个数组中。现在,当我像这样在 sinatra 应用程序中运行它时:

get '/api/users/:fb_id' do |fb_id|
    user = User.where :fb_id => fb_id
    user.to_json :methods => :new_cookies
end

它将它包装在一个数组中!!!像这样:

[{someAttr: someValue, ....}]

我该如何解决这个问题,更重要的是,为什么?!?

4

2 回答 2

1

替换这一行:

user = User.where :fb_id => fb_id

用这条线:

user = User.find_by_fb_id fb_id
于 2012-11-28T08:51:35.537 回答
1

只需使用哈希。[]

 Hash[{a: :b}]
 # => {:a=>:b}

更重要的是,为什么?!?

您在第二个示例中使用的是哪个 ORM?如果是 ActiveRecord,则User.where :fb_id => fb_id返回ActiveRecord::Relation对象,该对象在您调用.to_json. 它可以像这样固定

get '/api/users/:fb_id' do |fb_id|
  user = User.find_by_fb_id(fb_id)
  user.to_json :methods => :new_cookies
end
于 2012-11-28T08:26:03.697 回答