Ruby Grape-不要对可选参数应用验证程序

Ruby Grape-不要对可选参数应用验证程序,ruby,grape-api,Ruby,Grape Api,我对用gem编写的API有一个问题。我已经编写了一个测试,检查发送到我的API的UUID是否符合预期的格式 对于可选字段,用户可以选择1。不发送值,或2。发送一个空值 在第二种情况下,我的UUID验证器被评估并检查nil值,该值失败(它应该成功,因为这是一个可选参数)。我需要在验证器中检查选中的参数是可选的还是必需的,并且仅当参数是可选的时才允许nil值。你知道怎么做吗 到目前为止,我唯一的选择是为每个UUID(不安全)允许nil值或匹配模式,或者定义两个不同的验证器 module Public

我对用gem编写的API有一个问题。我已经编写了一个测试,检查发送到我的API的UUID是否符合预期的格式

对于可选字段,用户可以选择1。不发送值,或2。发送一个空值

在第二种情况下,我的UUID验证器被评估并检查
nil
值,该值失败(它应该成功,因为这是一个可选参数)。我需要在验证器中检查选中的参数是可选的还是必需的,并且仅当参数是可选的时才允许
nil
值。你知道怎么做吗

到目前为止,我唯一的选择是为每个UUID(不安全)允许nil值或匹配模式,或者定义两个不同的验证器

module PublicApi
  module Validators
    # This class represents a UUID params and validates the UUID format
    # Valid for both nil values and uuid-formatted strings (8-4-4-4-12)-
    #
    # Usage in the endpoint:
    #   requires :id, type: String, uuid: true
    #
    class Uuid < Grape::Validations::Base
      def validate_param!( attr_name, params )
        # TODO: accept nil value only if the param is optional
        uuid_param = params[ attr_name ]
        unless uuid_param.nil? || uuid_param =~ /^[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}$/i
          fail Grape::Exceptions::Validation, params: [ @scope.full_name( attr_name ) ],
                                              message: "must be a UUID, in this format: '58d5e212-165b-4ca0-909b-c86b9cee0111'"
        end
      end
    end
  end
end
模块PublicApi
模块验证器
#此类表示UUID参数并验证UUID格式
#对nil值和uuid格式的字符串(8-4-4-4-12)都有效-
#
#端点中的用法:
#需要:id,类型:String,uuid:true
#
类Uuid
如果有人有解决办法