我尝试做的是重复使用葡萄和葡萄实体宝石的类型和描述。
在文档中,我阅读了以下内容:
您可以使用以下命令直接在params块中使用实体文档:Entity.documentation。
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个宝石中的类型和描述?
答案 0 :(得分:1)
您可以这样做
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
作为参数,而不是全部。