【问题标题】:Rails Strong Parameters either in root or nested object根或嵌套对象中的 Rails 强参数
【发布时间】:2018-08-01 00:47:41
【问题描述】:

我希望能够在任一根参数对象中支持一组参数:

?foo=a
params.permit(:foo)

或者在嵌套对象中:

?bar[foo]=a
params.require(:bar).permit(:foo)

我将参数从表单对象传递到该控制器,因此嵌套对象自然发生,但我还希望能够在查询字符串中传递根对象中的参数并支持两者。

有没有一种优雅、简洁的方法来实现这一点?

【问题讨论】:

    标签: ruby-on-rails strong-parameters


    【解决方案1】:

    require 类似于[],但在缺少值时会出现异常(很像Hash#fetch)。如果嵌套结构存在,您可以直接使用 [] 来获取嵌套结构,否则返回到根 params

    (params[:bar] || params).permit(:foo)
    

    【讨论】:

      【解决方案2】:

      请记住,require 与 permit 不同。

      require 方法可确保存在特定参数。没有必要在嵌套的上使用,它确保需要的参数出现在参数中,否则会抛出错误。

      你可以像这样使用嵌套属性

      params = ActionController::Parameters.new({
        person: {
          name: "Francesco",
          age:  22,
          pets: [{
            name: "Purplish",
            category: "dogs"
          }]
        }
      })
      
      permitted = params.permit(person: [ :name, { pets: :name } ])
      permitted.permitted?                    # => true
      permitted[:person][:name]               # => "Francesco"
      permitted[:person][:age]                # => nil
      permitted[:person][:pets][0][:name]     # => "Purplish"
      permitted[:person][:pets][0][:category] # => nil
      

      你可以查看这个here的文档

      【讨论】:

        猜你喜欢
        • 2013-08-28
        • 2014-06-12
        • 2015-09-20
        • 2014-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        相关资源
        最近更新 更多