我要做的是在葡萄和葡萄实体宝石中重用类型和描述。
在文档中,我阅读了以下内容:
您可以通过使用:Entity.documentation 直接在 params 块中使用实体文档。
module API class Statuses < Grape::API version 'v1' desc 'Create a status' params do requires :all, except: [:ip], using: API::Entities::Status.documentation.except(:id) end post '/status' do Status.create! params end end end
这允许我使用 Grape Entity 中定义的文档中的字段描述和字段类型。
每当我定义一个只需要 1 个字段的 API 时,我都需要做这样的事情(我觉得有点脏):
给定:
module Entities
class Host < Grape::Entity
expose :id
# ... exposing some other fields ...
expose :mac_address, documentation: { type: String, desc: "The mac address of the host" }
expose :created_at, documentation: { type: DateTime, desc: "Record creation date" }
expose :updated _at, documentation: { type: DateTime, desc: "Record update date" }
end
end
我可以:
params do
requires :mac_address, type: V1::Entities::Host.documentation[:mac_address][:type], desc: V1::Entities::Host.documentation[:mac_address][:desc]
end
我不喜欢上述解决方案主要有两个原因:
- 我不喜欢使用旨在支持文档生成的帮助器的字段“类型”。
- 这很麻烦。
有没有更好的方法在 2 个宝石之间共享类型和描述?