如何覆盖我的classes属性如何为我的订单模型呈现JSON

时间:2018-10-19 22:44:11

标签: ruby-on-rails json

我目前正在执行我的控制器操作:

render json: order.to_json(:include => [items: {include: [products: {include: [:inventory]}]}])

现在,我将其移到像这样的更丰富的对象上

class OrderResponse
  attr_accessor :success, :errors, :order, :users
  def initialize(success, errors)
    @success = success
    @errors = errors
  end

end

现在的问题是,它不能呈现订单模型的所有内部数据。 json现在只有命令属性,因为我现在不叫:includes。

response = OrderResponse.new(true, [])
response.order = order
response.user = user

render json: response

如何覆盖现在如何将订单转换为json?

1 个答案:

答案 0 :(得分:1)

就像您可以使用ERB模板语言(或其他语言)创建.html模板一样,您可以使用jbuilder DSL来呈现复杂的json响应。

OrdersController:

@response = OrderResponse.new(true, [])
render :response, formats: [:json]

views / orders / response.json.jbuilder

json.call @response, :id
json.user do
  json.extract! @response.user, :id, :created_at # ...
end
json.order do
  json.extract! @response.order, :id, :created_at # ...
end