我的 Controller 里有这个:
params.require(:item).permit!
让我们假设这个 rspec 规范,它按预期工作:
put :update, id: @item.id, item: { name: "new name" }
但是,以下原因会导致ActionController::ParameterMissing
:
put :update, id: @item.id, item: nil
它与我用于其他操作的 Controller 宏有关,我无法通过它控制发送的参数(宏检查用户凭据,所以我真的不关心实际测试 #update
操作,而我只是为它测试 before_filters)。
所以我的问题是:如何使 params[:item]
成为可选的,但如果它存在,仍然过滤其中的属性?
最佳答案
关于:
params.require(:item).permit!如果参数[:item]
您不能要求可选参数。这是矛盾的。
编辑:正如 mtjhax 在他的评论中提到的,有来自 here 的建议使用 fetch
代替:params.fetch(:item, {}).permit!
关于ruby - 如何制作可选的强参数键但过滤嵌套参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17687506/