Ruby on rails 如何覆盖GrapeAPI响应负载中的根键? 模块实体 类StuffEntity

Ruby on rails 如何覆盖GrapeAPI响应负载中的根键? 模块实体 类StuffEntity,ruby-on-rails,grape-api,grape-entity,Ruby On Rails,Grape Api,Grape Entity,我如何通过重用这个实体来干涸代码,同时仍然可以灵活地重命名实体中定义的根键(“stuff”和“stuff”) 在公开由现有实体表示的集合子集或公开可由现有实体表示的关联集合的场景中,可能需要执行此操作。在公开关联对象或集合时隐藏根键 假设我有一个具有name属性的对象和一些范围内的东西的集合,我想将它们公开为一些东西。我可以用这样的实体来实现这一点: 模块实体 类CoolStuffEntity

我如何通过重用这个实体来干涸代码,同时仍然可以灵活地重命名实体中定义的根键(“stuff”和“stuff”)

在公开由现有实体表示的集合子集或公开可由现有实体表示的关联集合的场景中,可能需要执行此操作。

在公开关联对象或集合时隐藏根键 假设我有一个具有
name
属性的对象和一些
范围内的东西的集合,我想将它们公开为
一些东西。我可以用这样的实体来实现这一点:

模块实体
类CoolStuffEntity
root:false
传递给
represente
方法可确保在不使用根键的情况下表示嵌套关联。以下是有无该参数时的表示形式:

# Without root: false
cool_stuff: {
  some_stuffs: { 
    stuffs:    [ /* collection represented by StuffEntity */ ] 
  },
  name: 'Something'
}

# With root: false
cool_stuff: { 
  some_stuffs: [ /* collection represented by StuffEntity */ ],
  name:        'Something'
}
在本例中,传递
root:false
可确保嵌套实体的根键不包含在我们的表示中

在显示没有定义根的实体时设置根键名称 假设我们有一个没有指定根的实体:

模块实体
类StuffEntity
用此实体表示的对象的可序列化哈希如下所示:
{name:'object name'}

在我们的API中,我们可以这样指定响应密钥:

get do
stuff\u object=stuff.find\u by(用户标识:当前用户)
现在的东西,
使用:Entities::StuffEntity,
根::东西
结束
因此,我们的响应将如下所示:
{stuff:{name:'objectname'}}

注意,“root”在这里接受字符串和符号参数

如果要在API响应中重命名根键 那么,如果我有一个实体,其中我指定了一个根键,并且我希望响应中的键不同(例如,公开集合的子集),该怎么办?我可以再次使用
表示,而不是使用
呈现
。除了这一次,我可以给它一个密钥名,而不是通过传递“false”来禁用根密钥:

get do
my_stuff=stuff.find_by(用户\u id:当前用户)
实体::StuffEntity.Representation(
我的东西,
我的东西
)
结束