Rails 3使用自定义属性/方法response_to json

时间:2011-06-28 16:21:18

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

在rails应用程序中,我有一个动作,返回不同模型集合的json表示。它看起来像这样

respond_to :json

def index
  @cars = Car.all
  @vans = Van.all
  respond_with({
    :cars => @cars,
    :vans => @vans
  })
end

但是,我想自定义传递给json对象的属性和方法。有点像:

respond_with({
  :cars => @cars.to_json(:only => [:make, :model], :methods => [:full_name]),
  :vans => @vans
})

执行上述操作后,会将“cars”的json表示形式转义为一个大字符串,如:

{
  "cars":"[{\"car\":{\"make\":\"Ford\"  ... etc
  "vans": [{"van":{"make":"Citreon"  ... vans not escaped
}

显然我正以错误的方式接近这一点。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:12)

由于您将to_json嵌套在另一个Hash中,我认为您需要使用as_json(返回Hash而不是String )而不是:

respond_with({
  :cars => @cars.as_json(:only => [:make, :model], :methods => [:full_name]),
  :vans => @vans
})