如何检查rails中的参数类型?

问题描述 投票:0回答:1

也许我会过度验证,但我想确保当我收到POST请求时,它包含特定的特定值(可以通过params.require()完成),并且这些值是特定类型的:hash ,数组,字符串。 TBH,我甚至不确定可以通过POST请求传输的所有类型。问题是,当使用.is_a时,对象显示为ActionController :: Parameters类型?如果有更好的方法在rails中执行此操作,请告诉我。

ruby-on-rails ruby-on-rails-5
1个回答
0
投票

Rails(或者更准确地说是Rack)可以解析通过name属性创建的参数中的数组和哈希值。

例如:

# simple hash
user[email]="[email protected]"

# nested hash
user[address][street]="Easy Street 21" 

# an array with 3 elements
user[some_arrray_param][]="1" 
user[some_arrray_param][]="2" 
user[some_arrray_param][]="3" 

当你从.require.fetch的参数中得到一个包含“hash”的键时,它们实际上会返回一个ActionController::Parameters实例,它是一个类似哈希的对象,但其他东西中还包含Rails强参数接口。

.require()只是获取一个哈希键,如果它不存在则引发异常。

你想要做的事情确实应该通过验证在模型级别上处理,而不是让你的控制器变胖。

© www.soinside.com 2019 - 2024. All rights reserved.