返回关联的模型属性作为当前模型属性

时间:2014-05-07 21:37:20

标签: ruby-on-rails json

我在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'

}

无论如何这样做?

1 个答案:

答案 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