gpt4 book ai didi

ruby-on-rails - 在 Grape 和 Grape Entity gem 之间共享描述和类型

转载 作者:太空宇宙 更新时间:2023-11-03 16:41:49 24 4
gpt4 key购买 nike

我想做的是在葡萄和葡萄实体 gem 之间重用类型和描述。

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

You can use entity documentation directly in the params block with using: 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 实体中定义的文档中的字段描述和字段类型。

每当我定义一个只需要 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 个 gem 的类型和描述?

最佳答案

你可以这样做

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 之间共享描述和类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47213244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com