在生成有效负载之前,使用JSON密钥包装Rails模型结构

问题描述 投票:0回答:1

我有一个模型,格式如下:

rails generate model Location name:text latitude:text longitude:text

我会以下列方式提供服务:

render json: { location: @location } #retrieved column

但是,当从数据库中检索数据并将其作为json有效负载提供时,我想将纬度和经度包装在不同的密钥中,并按以下格式提供:

{
   "name": "New York",
   "coordinates": {
      "latitude": "12.23543", 
      "longitude": "2.44556"
   }    
}

如何编辑我的模型结构以提供此格式?

ruby-on-rails ruby
1个回答
1
投票

您可以通过多种方式构建JSON响应。

  1. 一种是覆盖模型类中的as_json方法。
  2. 您可以将Active Model Serializers用于更复杂的JSON结构。
  3. 或者你也可以使用Jbuilder

您可以使用以下代码段覆盖位置模型类中的as_json方法。

class Location

  def as_json(options={})
   method_arr = [:coordinates]
   super(except: ['created_at', 'updated_at'],methods: method_arr)
  end

  def coordinates
    {'latitude_key_name'=> latitude, 'longitude_key_name'=> longitude}
  end 
end
© www.soinside.com 2019 - 2024. All rights reserved.