Rails 3 - 返回包装在单个对象中的JSON对象?

时间:2011-06-23 10:32:33

标签: ruby-on-rails json ruby-on-rails-3

我目前有一个返回JSON对象的控制器,如下所示:

def getModels
  @vehicleModels = @vehicleModels.where(:vehicleMake_id => params[:vehicleMake])
  respond_with(@vehicleModels)
end

这很好用,并返回以下JSON:

[
{"created_at":"2011-06-22T15:49:06Z","id":1,"name":"A4","updated_at":"2011-06-22T15:49:06Z","vehicleMake_id":1},
{"created_at":"2011-06-22T15:49:06Z","id":2,"name":"A5","updated_at":"2011-06-22T15:49:06Z","vehicleMake_id":1},
{"created_at":"2011-06-22T15:49:06Z","id":3,"name":"A6","updated_at":"2011-06-22T15:49:06Z","vehicleMake_id":1},
{"created_at":"2011-06-22T15:49:06Z","id":4,"name":"A8","updated_at":"2011-06-22T15:49:06Z","vehicleMake_id":1},
{"created_at":"2011-06-22T15:49:06Z","id":5,"name":"TT","updated_at":"2011-06-22T15:49:06Z","vehicleMake_id":1},
{"created_at":"2011-06-22T15:49:06Z","id":10,"name":"Touareg","updated_at":"2011-06-22T15:49:06Z","vehicleMake_id":1}
]

问题是我试图加载JSON的JQuery下拉列表似乎期待一个JSON根节点。因此,直接加载上面的JSON不起作用。但如果它有一个根节点,如下所示,它可以正常工作:

{"results":[
{"created_at":"2011-06-22T15:49:06Z","id":1,"name":"A4","updated_at":"2011-06-22T15:49:06Z","vehicleMake_id":1},
{"created_at":"2011-06-22T15:49:06Z","id":2,"name":"A5","updated_at":"2011-06-22T15:49:06Z","vehicleMake_id":1},
{"created_at":"2011-06-22T15:49:06Z","id":3,"name":"A6","updated_at":"2011-06-22T15:49:06Z","vehicleMake_id":1},
{"created_at":"2011-06-22T15:49:06Z","id":4,"name":"A8","updated_at":"2011-06-22T15:49:06Z","vehicleMake_id":1},
{"created_at":"2011-06-22T15:49:06Z","id":5,"name":"TT","updated_at":"2011-06-22T15:49:06Z","vehicleMake_id":1},
{"created_at":"2011-06-22T15:49:06Z","id":10,"name":"Touareg","updated_at":"2011-06-22T15:49:06Z","vehicleMake_id":1}
]}

所以问题很简单 - 如何让rails包含根节点?

我应该指出,我试图通过在我的配置中设置ActiveRecord::Base.include_root_in_json = true来尝试这样做,但是只根据我的需要将根节点添加到每个单独的对象,而不是一个整体根节点。

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以执行以下操作

 respond_with { :results => @vehicleModels }