我在ProcessingStatus和Order之间有一个关联,如下所示:
订单belongs_to ProcessingStatus ProcessingStatus has_one Order
当我返回订单时,我希望能够将ProcessingStatus'name'属性作为我的JSON响应的'status'属性。
所以,现在,对于/ orders / 73的以下GET调用,
render :json => @order.to_json(:only => [:id], :include => {:processing_status => {:only => [:name]}})
我明白了:
{
"id": 73,
"processing_status": {
"name": 'processing'
}
}
我正在寻找一种方法来解决这个问题:
{
"id": 73,
"status": 'processing'
}
无论如何这样做?
答案 0 :(得分:1)
您可以在模型上定义一个方法,该方法将状态返回为processing_status.name
的值,然后将其包含在您的json中:
class Order < ActiveRecord::Base
def status
self.processing_status.try(:name)
end
end
然后在to_json
来电中加入:
@order.to_json(only: :id, methods: :status)
或者,您可以将状态添加到转换为json的哈希:
@order.as_json(only: :id).merge(status: @order.processing_status.try(:name)).to_json
我已使用.try(:name)
,以防processing_status
为零,但您可能不需要。{在这两种情况下,行为略有不同,因为第一种情况在json中不包含status
,第二种情况包括"status":null
。