面对一个奇怪的问题或错误。
我有一个强参数方法的路线:
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参数,并且我在日志中有消息:未允许的参数: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的零值:(我没有找到任何关于这个问题的信息。也许这里有人可以帮助我。
提前致谢。
答案 0 :(得分:4)
可能导致您麻烦的两件事:
1)bang方法permit!
用于接受整个参数哈希,并且不接受任何参数。我也不确定是否可以在整个permit!
哈希上调用params
,文档对此不清楚。
2)您对数组表示法的使用可能会导致params
哈希混乱。 (这也可能是可以接受的,但与我过去看到的情况相比看起来有点不正统。)我会把你的st_params
写成
def st_params
params.permit(:id, :log, :metric_ids)
end
此外,您编写的metric_ids: []
之类的许可证参数会根据您将数据传递到上述哈希的方式将params[:metric_ids]
内嵌的任何参数列入白名单,我不认为这是你的用途。看来你正在这个哈希级别存储一个数组,并且没有进一步的复杂性,所以不需要在这个范围之外将参数列入白名单。
希望这有帮助!
答案 1 :(得分:0)
我面临着同样的问题。将as: :json
附加到post
可以解决我的问题。
参考:https://github.com/rspec/rspec-rails/issues/1700#issuecomment-304411233