28

我的控制器中有这个:

params.require(:item).permit!

让我们假设这个 rspec 规范按预期工作:

put :update, id: @item.id, item: { name: "new name" }

但是,以下原因ActionController::ParameterMissing

put :update, id: @item.id, item: nil

它与我用于其他操作并且我无法控制发送的参数的控制器宏有关(宏检查用户凭据,所以我并不真正关心实际测试#update操作,而我只是测试 before_filters它)。

所以我的问题是:如果它存在,我如何制作可选的,但仍然过滤其中的属性?params[:item]

4

1 回答 1

49

关于什么:

params.require(:item).permit! if params[:item]

您不能要求可选参数。那是矛盾的。

编辑:正如 mtjhax 在他的评论中提到的,这里有一些建议可以使用fetchparams.fetch(:item, {}).permit!

于 2013-07-16T23:11:25.330 回答