对于我的一种方法,下面的方法不起作用。我几乎把所有的东西都直接从官方文件中抄了出来:

params do
requires :authenticationType, type: Array[String], values: ['LOCAL', 'AD']
given authenticationType: ->(val) { val == 'LOCAL' } do
  requires :admin, type: String, allow_blank: false, regexp: /^[\w\.\@-]{1,64}$/
  requires :password, type: String, allow_blank: false, regexp: /^[\w\.\@-]{1,64}$/
end
end

它在“给定”行上给出了一个错误谁都知道怎么了我的目标:只有当“authenticationType”=“LOCAL”时,用户才应该提供“admin”和“password”
错误:
【2017-03-03 00:39:18.4848 14970/7f5d0603f700】
age/Cor/App/Implementation.cpp:304]:无法为生成进程
application/vagrant/masterapi:启动时出错
预紧器。错误ID:0bd79149错误详细信息保存到:
/来自应用程序的tmp/passenger-error-3OYsdJ.html消息:
grape::异常::未知参数
(grape::异常::未知参数)
/usr/local/lib/ruby/gems/2.3.0/gems/grape-0.16.2/lib/grape/dsl/parameters.rb:170:英寸
block in given'
/usr/local/lib/ruby/gems/2.3.0/gems/grape-0.16.2/lib/grape/dsl/parameters.rb:169:in
每个
/usr/local/lib/ruby/gems/2.3.0/gems/grape-0.16.2/lib/grape/dsl/parameters.rb:169:输入
given' /vagrant/masterapi/controllers/papi_controller.rb:93:in 阻止

最佳答案

“given”只接受从grape版本0.17开始的proc,在merge request(MR)1443中实现所以你要么更新,要么如果不可行,试着将这个mr移植到0.16.2。
Here's您版本的自述文件。
另外,在您的示例中,authenticationTypeparam是Array[String]类型,因此(至少在grape 0.17中),proc将收到Hashie::Array
这意味着:
->(val) { val == 'LOCAL' }
应该是
->(val) { val.first == 'LOCAL' }

关于ruby - Ruby/Grape在特定条件下所需的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42568710/

10-11 10:37