【问题标题】:Nested arrays in Strong Parameters in RailsRails 强参数中的嵌套数组
【发布时间】:2014-10-20 20:36:34
【问题描述】:

遇到一个奇怪的问题或错误。

我有一个强参数的路由方法:

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 值 :( 我没有找到任何有关该问题的信息。也许这里有人可以帮助我。

提前致谢。

【问题讨论】:

    标签: ruby-on-rails rspec strong-parameters


    【解决方案1】:

    2 件事可能会在此处引起您的麻烦:

    1) bang 方法permit! 用于接受参数的整个散列,它不接受任何参数。我也不确定是否可以在整个 params 哈希上调用 permit!,文档对此并不清楚。

    2) 您对数组表示法的使用可能会导致params 散列有些混乱。 (这也可能是可以接受的,但与我以前看到的相比看起来有点不正统。)我会把你的st_params写成

    def st_params
      params.permit(:id, :log, :metric_ids)
    end
    

    此外,根据您将数据传递给上述哈希的方式,您编写的类似 metric_ids: [] 的许可参数会将嵌套在 params[:metric_ids] 内的任何参数列入白名单,我认为这不是您的预期用途。看来您是在此哈希级别存储一个数组,并且没有进一步的复杂性,因此无需将超出此范围的参数列入白名单。

    希望这会有所帮助!

    【讨论】:

    • 感谢您的回复。我在上面修复了我的错误打印。如果我按照您的建议进行操作,我仍然会收到消息:未经许可的参数:metric_ids。当 metric_ids 数组中没有数组时,该问题得到解决,例如:metric_ids: [1,2,3],但不是 metric_ids:[[1,2,3]]
    • @AndreyEremin 你能找到任何解决丢失参数的方法吗?我的参数也丢失了
    【解决方案2】:

    我遇到了同样的问题。将as: :json 附加到post 为我解决了这个问题。

    参考:https://github.com/rspec/rspec-rails/issues/1700#issuecomment-304411233

    【讨论】:

      猜你喜欢
      • 2014-06-12
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多