我要做的是在grape和grape实体gems中重用类型和描述。
在文档中,我阅读了以下内容:
使用: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实体中定义的文档中的字段描述和字段类型。
每当我定义一个只需要一个字段的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

我不喜欢上面的解决方案主要有两个原因:
我不喜欢使用helper的字段“type”来支持文档生成。
太麻烦了。
有没有更好的方式来分享2个宝石的类型和描述?

最佳答案

你可以这样做

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作为一个参数,而不是全部。

关于ruby-on-rails - 在Grape和Grape Entity gem 中共享desc和类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47213244/

10-13 04:53