如何在 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)
}
例如,我有几个模型,例如:名称、位置、登录...我想在 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)
}