也许我会过度验证,但我想确保当我收到POST请求时,它包含特定的特定值(可以通过params.require()完成),并且这些值是特定类型的:hash ,数组,字符串。 TBH,我甚至不确定可以通过POST请求传输的所有类型。问题是,当使用.is_a时,对象显示为ActionController :: Parameters类型?如果有更好的方法在rails中执行此操作,请告诉我。
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()
只是获取一个哈希键,如果它不存在则引发异常。
你想要做的事情确实应该通过验证在模型级别上处理,而不是让你的控制器变胖。