来自Rails JBuilder的空响应

时间:2015-01-16 07:44:07

标签: ruby-on-rails json jbuilder

有以下jbuilder模板:

json.extract! @order do |order|
    json.id                                         order.id
    json.room                                   order.room
    json.note                                   order.note
    json.order_status_id                order.order_status_id
    json.created_at                         order.created_at
    json.restaurant_order_items order.restaurant_order_items

    json.restaurant do
        json.id      order.restaurant.id
        json.email order.restaurant.email
        json.phone order.restaurant.phone

        json.place do
            json.title order.restaurant.place.title
        end
    end
end

我不明白为什么,但回复是'{}'。所以,我需要得到像'{id:10,...}'这样的回复。我该怎么做?谢谢!

1 个答案:

答案 0 :(得分:1)

问题是extract!意味着只返回命名属性,它不会使用给定的块。

json.extract!(@order, :id, :note)
# => {"id":1,"note":"test"}

您也可以使用调用语法:

,而不是调用extract!方法
json.(@order, :id, :note)
# => {"id":1,"note":"test"}

考虑到这一点,您可以开始创建这样的模板:

json.(@order, :id, :note)

json.restaurant do
  json.(@order.restaurant, :phone)
end

# => {"id":1,"note":"test","restaurant":{"phone":"123"}}

请注意,如果生成的JSON密钥的名称与对象上的属性相同,则不需要提及它两次。

json.(@order, :id)
# vs
json.id @order.id