我要做的是在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/