如何使用 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
,而如果我确实传递了属性,它将使用require
和permit
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 强参数的主要内容,如果未能解决你的问题,请参考以下文章