如何在不使用[-1]的情况下访问嵌套强参数中的元素?

时间:2017-11-22 19:03:37

标签: ruby-on-rails multidimensional-array strong-parameters

我有一个包含我的模型允许参数的基本控制器。这是简化版本的样子:

def order_params
  allowed_attrs = [
    :id,
    :first_name,
    { 
      art_attributes: [
        :id
      ],
      item_attributes: [
        :id,
        :art_id,
        {
          product_attributes: [
            :id,
            :item_id
          ]
        }
      ]
    }
  ]


  if can? :manage, Order
    allowed_attrs[-1][:art_job_attributes] += [
      :artist_id,
      :ship_date
    ]
  end

  params.require(:order).permit(allowed_attrs)
end

我的问题是:在如果可以的话?管理块,如何在不使用 [ - 1] 的情况下访问:art_job_attributes 元素?如果我修改 allowed_attrs 的底部,这将成为潜在的错误。

.last .pop 会导致同样的问题,循环似乎可能会耗费太多时间。

我想,因为这基本上是一个我可以执行以下操作的数组:

allowed_attrs.index(:art_job_attributes)

但结果是零。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

不完全确定这是解决这个问题的好方法,但我按照我想要的方式工作。我打破了参数。我拆分了顶级变量,然后在方法的底部组合了结果。这就是我的所作所为:

def order_params

  allowed_attrs = [
    :id,
    :first_name
  ]

  art_attrs = {
    art_attributes:[
      :id
    ],
    item_attributes: [
      :id,
      :art_id,
      {
        product_attributes: [
          :id,
          :item_id
        ]
      }
    ]
  }

  if can? :manage, Order
    art_attrs[:art_attributes] += [
      :ship_date,
      :artist_id
    ]
  end

  allowed_attrs.push(art_attrs)
  params.require(:order).permit(allowed_attrs)  
end