遇到一个奇怪的问题或错误。
我有一 strip 有强参数方法的路线:
def st_params
params.permit([:id, logs: [], metric_ids: []])
end
然后我用例如 rspec 调用它:
post some_path(format:json, metric_ids:[ [1,0,1], [5,1,4] ])
当我调用 st_params 方法时,没有 metric_ids 参数,并且我在日志中收到消息:Unpermitted parameters: metric_ids
但是,如果我像这样更改 st_params 方法:
def st_params
p = params.permit([:id, logs: [], metric_ids: []])
p[:metric_ids] = params[:metric_ids]
# or just p = params.permit!
p
end
现在,在浏览器中一切正常,但看起来很奇怪。
但是在 rspec 中,我在任何情况下都收到了 metric_ids 的 nil 值:( 我没有找到有关该问题的任何信息。也许这里有人可以帮助我。
提前致谢。
最佳答案
2 件事可能会在这里引起您的麻烦:
1) 爆炸法permit!
用于接受完整的参数散列,它不接受任何参数。我也不确定 permit!
可以在整个params
上调用hash,文档对此不清楚。
2) 您使用数组表示法可能会导致 params
散列一些困惑。 (这也可能是可以接受的,但与我以前看到的相比看起来有点不正统。)我会写你的 st_params
作为
def st_params
params.permit(:id, :log, :metric_ids)
end
此外,像
metric_ids: []
这样的许可参数正如您所写的,会将嵌套在 params[:metric_ids]
中的所有参数列入白名单。 ,根据您将数据传递给上述哈希的方式,我认为这不是您的预期用途。看来您正在这个哈希级别存储一个数组,并且没有进一步的复杂性,因此无需将超出此范围的参数列入白名单。希望这可以帮助!
关于ruby-on-rails - Rails 中强参数中的嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25524115/