Rails强参数问题:已正确声明仍无法传递数组参数
解决Rails强参数无法获取ID数组的问题
我来帮你搞定这个强参数校验的问题~
首先得明确问题出在哪:你的operator_params方法里写了params.fetch(:operator, {}),这就告诉Rails——我要的参数都得嵌套在:operator这个哈希里!但你现在传的JSON是顶级的{"ids": ["asd"]},或者URL里直接放ids参数,强参数自然会把这些“不在指定哈希里”的参数过滤掉,所以你拿不到ids数组。
给你两个可行的解决方案,按需选择:
方案一:修改请求参数结构(推荐,符合Rails参数嵌套规范)
把ids嵌套到operator哈希里,请求JSON改成这样:
{ "operator": { "ids": ["asd"] } }
如果是URL参数的话,改成:
/your-path?operator[ids][]=asd&operator[ids][]=another-id
这样你的现有强参数代码完全不用改,就能正常获取到ids数组了。
方案二:调整强参数的写法(适合不想改请求结构的场景)
如果没法修改请求的参数结构,那就直接从顶级参数里获取ids,把operator_params改成:
def operator_params params.permit(ids: []) end
要是你还需要从operator哈希里拿其他参数,可以把两者结合:
def operator_params # 先拿operator哈希里的参数,再合并顶级的ids参数 params.fetch(:operator, {}).permit(:other_param1, :other_param2) .merge(params.permit(ids: [])) end
注意这里要确保参数名称不会冲突哦。
快速验证方法
你可以在控制器里加一行代码,打印过滤后的参数,确认是否拿到了ids:
def your_action puts operator_params.inspect # 看控制台输出的参数内容 # 其他逻辑... end
内容的提问来源于stack exchange,提问作者CaffeineZ
相关产品推荐
相关产品推荐

