如何确认当前发送的参数?Rails参数权限配置后的参数排查疑问
如何检查请求中是否发送了特定参数(而非参数值是否存在)
你已经实现了参数过滤的方法:
def send_params params.require(:article).permit(:color, :skin, :cover) end
现在你需要判断请求里是否实际发送了某个参数(比如color),而不是判断参数值是否非空——哪怕参数值是空字符串,只要参数键存在,就说明是发送了这个参数的。之前用的if params_search[:color].present?是验证值是否有效,不符合你的需求,这里给你几个解决办法:
直接检查参数键是否存在
params[:article]是ActionController::Parameters对象,用has_key?方法可以直接判断某个键是否存在,不管对应的值是什么:if params[:article].has_key?(:color) # 这里说明color参数被发送了,不管它的值是空还是有内容 end基于过滤后的参数检查
如果想用你已经过滤好的send_params返回值,同样可以用has_key?:permitted_params = send_params if permitted_params.has_key?(:color) # 执行你的业务逻辑 end获取所有发送的参数键
要是想知道这次请求一共发送了哪些article下的参数,可以用keys方法拿到所有键的数组:sent_param_keys = params[:article].keys # 比如只发送color参数的话,sent_param_keys 就是 [:color]
简单说,has_key?只检查键是否存在,完全符合你关注“发送的参数本身”的需求,而present?会同时检查键存在且值非空,这就是两者的核心区别。
内容的提问来源于stack exchange,提问作者tunosi st
相关产品推荐
相关产品推荐

