如何使用 params.fetch 强参数

Posted

技术标签:

【中文标题】如何使用 params.fetch 强参数【英文标题】:How to use params.fetch strong parameters 【发布时间】:2018-01-23 14:06:55 【问题描述】:

使用rails g scaffold kittens强参数功能时,kitten_params

def kitten_params
  params.fetch(:kitten, )
end

我熟悉强参数, params.require(:kitten).permit(:name, :age) 但我不确定如何为此使用fetch 方法。

【问题讨论】:

【参考方案1】:

但我不确定如何为此使用fetch 方法

简单。您不要为此使用fetch。由于您在创建脚手架时没有提供任何属性,因此 rails 不知道将什么放入 permit 部分并生成该代码,这对于这种情况最明智。当您向小猫表单添加一些字段时,将kitten_params 升级为正常的强参数“形状”。

params.require(:kitten).permit(:name, :age)

【讨论】:

啊,谢谢,现在我明白了。由于我没有将任何属性传递给脚手架,因此它使用了fetch,而如果我确实传递了属性,它将使用requirepermit params.fetch(:kitten, ) 只是一种 ActiveSupport 访问哈希键的方式,如果未设置则返回默认值。在普通的 ruby​​ 中,它会显示为 params[:kitten] || @max params.fetch(:kitten, ) 是纯 Ruby,不是 ActiveSupport :)【参考方案2】:

根据Documentation,您应该只在末尾添加.permit,例如:

params.fetch(:kitten, ).permit(:name, :age)

【讨论】:

【参考方案3】:

根据documentation,当您没有对象的实例时,您不能使用.require。 然后.fetch 为您的未创建对象提供默认参数(#new#create 操作)。

【讨论】:

以上是关于如何使用 params.fetch 强参数的主要内容,如果未能解决你的问题,请参考以下文章

Rails 嵌套强参数,如何使用?

如何允许具有强参数的数组

禁用特定操作的强参数

TypeScript 中的强类型剩余参数

如何将信号参数作为 int 而不是字符串发出?

回调方法使用场景理解