Rails:.require() 却没有真正需要它?

Tal*_*boy 5 parameters ruby-on-rails actioncontroller strong-parameters ruby-on-rails-5

我正在尝试使用...

params.require(:subscriber).permit(:utm_source, :utm_medium, :utm_campaign, :utm_term, :utm_content)
Run Code Online (Sandbox Code Playgroud)

问题是在极少数情况下我想做:

Subscriber.new(subscriber_params)

我不在乎所有的值是否都是空的......当我这样做时它会引发ActionController::ParameterMissing

所以我需要的是一种使require()“可选”成为“可选”的方法,但仍然使用它来限制嵌套参数和安全性,这样人们就无法添加{admin: true}诸如此类的东西......

实际的 params 哈希看起来像:

{subscriber: {utm_source: 1, ...}

我无法更改该部分,因为它已在应用程序的许多其他地方使用。就这一点而已。

Ger*_*rry 8

您可以使用fetch代替require

params.fetch(:subscriber).permit(:utm_source, :utm_medium, :utm_campaign, :utm_term, :utm_content)
Run Code Online (Sandbox Code Playgroud)

检查导轨指南以获取有关强参数的更多信息。

  • 如果订阅者可能为空,请执行以下操作: params.fetch(:subscriber, {}).permit(...) (3认同)
  • @Tallboy A _scalar_ 可以被描述为**保存单个值的变量**。例如,数字或字符串都是标量,但数组或哈希则不是。检查[这篇文章](https://softwareengineering.stackexchange.com/questions/238033/what-does-it-mean-when-data-is-scalar)以获得更详细的答案。 (2认同)