是否可以针对Grape中的每个数组元素运行自定义验证器?我知道我可以使用验证器验证整个数组,但我认为如果我将它用于每个元素,错误消息会更好。
我的参数如下所示:
"conditions": [
{
"field": "interests",
"operator": "any",
"value": ['cars', 'cats']
},
{
"field": "age",
"operator": "gt",
"value": 25
}
]
使用requires :conditions, type: Array, valid_conditions: true
,验证器将针对整个阵列运行。我能得到的最好吗?
答案 0 :(得分:0)
这是完全可能的,您可以在响应中声明特定键的值。
assert_equal some_obj[0].first[1], "interests"
这是irb
中的相同内容 Success weeds out the uncommitted ~ irb
2.2.3 :001 > a = [{:field=>"interests", :operator=>"any", :value=>["cars", "cats"]}]
=> [{:field=>"interests", :operator=>"any", :value=>["cars", "cats"]}]
2.2.3 :002 > a[0].first
=> [:field, "interests"]
2.2.3 :003 > a[0].first[1]
=> "interests"
2.2.3 :004 >
答案 1 :(得分:0)
是的,但是你必须使用自定义验证器。
这是一个例子
class Validator < Grape::Validations::Base
def validate_param!(attr_name, params)
unless params[attr_name].each { //your code here }
fail Grape::Exceptions::Validation, params: [@scope.full_name(attr_name)], message: 'your message'
end
end
end
然后你会像这样使用它:
requires :conditions, type: Array, validator: true