Ruby / Grape在特定条件下需要参数

时间:2017-03-03 00:52:46

标签: ruby api rack grape grape-api

对于我的一种方法,以下方法不起作用。我几乎直接从官方文档中复制了所有内容:

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

给出"给出的错误#34;线。任何人都知道什么是错的。我的目标:只有' authenticationType' ==' LOCAL'如果用户提供“管理员”#39;和密码'

错误:

  

[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来自应用程序的消息:   葡萄::例外:: UnknownParameter   (葡萄::例外:: UnknownParameter)
  /usr/local/lib/ruby/gems/2.3.0/gems/grape-0.16.2/lib/grape/dsl/parameters.rb:170:in   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:in   given' /vagrant/masterapi/controllers/papi_controller.rb:93:in 阻止'

1 个答案:

答案 0 :(得分:0)

给予'自葡萄版本0.17起接受proc,在合并请求(MR)1443中实现。因此,您应该更新,或者如果不可行,请尝试将此MR反向移植到0.16.2。

Here's适用于您的版本的自述文件。

此外,在您的示例中,authenticationType param的类型为Array[String],因此(至少在葡萄0.17中),proc将收到Hashie::Array

这意味着:

->(val) { val == 'LOCAL' }

应该是

->(val) { val.first == 'LOCAL' }