ruby - 如何制作可选的强参数键但过滤嵌套参数?

标签 ruby ruby-on-rails-4 strong-parameters

我的 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/

相关文章:

ruby-on-rails - 在 respond_with 散列中包含一个虚拟属性

ruby-on-rails - Prawn +俄文字体

ruby-on-rails - 如何在创建对象之前修改参数

ruby-on-rails - 如何使用 strong_parameters 允许除 user_id 之外的所有属性?

ruby-on-rails - 强参数 : How to permit parameters using conditions

ruby-on-rails - 在 RubyOnRails 应用程序中生成图形

Ruby:否定传递给 proc 的散列?

ruby-on-rails - HTTP::Request::UnsupportedSchemeError -- Rails -- HTTP gem

ruby-on-rails - 调用方法,在Application controller中定义,在其他controller中

ruby-on-rails - 为模型定义几种json格式