2

我要做的是在葡萄和葡萄实体宝石中重用类型和描述。

在文档中,我阅读了以下内容:

您可以通过使用: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 个宝石之间共享类型和描述?

4

1 回答 1

0

你可以这样做

module API
  class Statuses < Grape::API
    version 'v1'
    desc 'Create a status' do
      params API::Entities::Status.documentation.except(:created_at, :updated _at)
    end
    post '/status' do
      Status.create! params
    end
  end
end

这只会给你mac_address一个参数而不是全部。

于 2018-11-16T06:38:50.780 回答