如何在 rails 中检索子表为 json 的表?

How to retrieve Tables with their sub-tables as json in rails?

例如,我有几个模型,例如:名称、位置、登录...我想在 rails 中查询后将所有表及其子表合并为 json ,像这样:

{
      "name": {
        "title": "mr",
        "first": "brad",
        "last": "gibson"
      },
      "location": {
        "street": "9278 new road",
        "city": "kilcoole",
        "state": "waterford",
        "postcode": "93027",
        "coordinates": {
          "latitude": "20.9267",
          "longitude": "-7.9310"
        },
        "timezone": {
          "offset": "-3:30",
          "description": "Newfoundland"
        }
      },
      "login": {
        "uuid": "155e77ee-ba6d-486f-95ce-0e0c0fb4b919",
        "username": "silverswan131",
        "password": "firewall",
        "salt": "TQA1Gz7x",
        "md5": "dc523cb313b63dfe5be2140b0c05b3bc",
        "sha1": "7a4aa07d1bedcc6bcf4b7f8856643492c191540d",
        "sha256": "74364e96174afa7d17ee52dd2c9c7a4651fe1254f471a78bda0190135dcd3480"
      }
}

如果您只使用 Rails,那么您可以使用 ActiveModel::Serializers::JSON

提供的 .as_json 方法获得大部分功能

您可以生成类似于您的示例的 JSON:

name = Name.first
location = Location.first
login = Login.first

ActiveRecord::Base.include_root_in_json = true

{
  **name.as_json(except: :id),
  **location.as_json(include: {
    coordinates: { only: [:latitude, :longitude] },
    timezone: { only: [:offset, :description] },
  }),
  **login.as_json(except: :id)
}