在我的API中,我通过以下方式将ActiveRecord对象转换为json:
user.to_json :methods => :new_messages
使用irb,当我执行此语句时,我得到:
{someAttr: someValue, ....}
这是完美的。这是一个单个对象,因此它不包含在数组中。现在,当我在sinatra app中运行这样的时候:
get '/api/users/:fb_id' do |fb_id|
user = User.where :fb_id => fb_id
user.to_json :methods => :new_cookies
end
它将它包装在一个阵列中!像这样:
[{someAttr: someValue, ....}]
我如何解决这个问题,更重要的是,为什么?!?
答案 0 :(得分:1)
只需使用Hash.[]
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
答案 1 :(得分:1)
替换此行:
user = User.where :fb_id => fb_id
这一行:
user = User.find_by_fb_id fb_id