def index
@users = User.all
render json: @users
end
返回一个json响应(实际上我有20个不同的属性,这只是一个子集):
{“id”:1, “name”:”John”, "city": "New York"},
{“id”:2, “name”:”Dave”, "city": "Chicago"},
{“id”:3, “name”:”Peter”, "city": "Beijing"}
但我希望回复更像是这样:
{“id”:1, “name”{"name”,"John”, "id":1}, "city": "New York"},
{“id”:2, “name”{"name”,"Dave”, "id":2}, "city": "Chicago"},
{“id”:3, “name”{"name”,"Peter”, "id":3}, "city": "Beijing"}
因此,当我遍历请求时,我可以访问这样的属性:
name.id #will print 1
name.name #will print “John”
city #will print "New York"
答案 0 :(得分:1)
只需在括号中输入:
@users = User.all
render json: @users.map{ |k| {name: {name: k.name, id: k.id}, city: k.city} }
答案 1 :(得分:0)
我是https://github.com/ruby-grape/grape-entity#example
的粉丝一些很酷的事情是,您可以为您需要的任何字段创建不同的模型定义,并且可以嵌套这些的任何变体。 因此,对于略有不同的示例(具有嵌套地址对象的用户):
在模特中:
class User < Grape::Entity
expose :name
end
class UserSimpleWithAddress < User
expose :address, using: API::Entities::AddressSimple
end
class AddressSimple < Grape::Entity
expose :zip
expose :city
end
渲染:
UserSimpleWithAddress.represent(@users).to_json
当您的模型/需求随着时间变得更加复杂时,这非常方便。