对待生命,不妨大胆一点,因为我们终将失去它

params.fetch和params.require的区别

这两种方式用于在 Rails 控制器中处理参数,但它们的用法和目的有所不同:

params.fetch(:article, {})

  • 功能:fetch 方法尝试从 params 中获取 :article 的键值对。如果 :article 存在,它返回对应的值;如果不存在,则返回一个空的哈希 {},而不会抛出异常。
  • 用途:这种方式通常用于你不确定参数是否存在的情况,并且你希望在参数缺失时提供一个默认值。

params.require(:articles).permit({})

  • 功能:require 方法确保 :articles 参数存在于 params 中。如果不存在,Rails 将抛出 ActionController::ParameterMissing 异常。permit({}) 方法用于指定哪些属性是允许的(在这个例子中,没有任何属性被允许)。
  • 用途:这种方式用于强制性地确保某些必需的参数存在,并用于强参数(Strong Parameters)以指定允许的属性,从而防止批量赋值漏洞。

总结

  • fetch 用于在找不到参数时提供默认值,而不会引发错误。
  • require 是用于确保参数存在,并与 permit 结合使用以过滤允许的参数。

在实际开发中,如果你需要控制和验证输入参数的存在和安全性,通常使用 require 和 permit 组合。而 fetch 常用于需要灵活处理参数的情况。