【问题标题】:How to use params.fetch strong parameters如何使用 params.fetch 强参数
【发布时间】: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 方法。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-5


    【解决方案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 操作)。

      【讨论】:

        猜你喜欢
        • 2016-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-25
        • 1970-01-01
        相关资源
        最近更新 更多