我正在构建一个 rails4 api,我在其中发布了一个嵌套的属性哈希。然而,该模型实际上并没有嵌套的属性或关联。试图通过将一些属性组合成一个组来制作更清晰的 post params 哈希,但让 api 处理解包和强参数验证。

## Example POST params
params[:item][:group] = {
  a: true,
  b: false
}

但是模型实际上并没有 group 列,属性 ab 是模型上直接的属性。

在没有 group 包装器的情况下处理这个问题只是
params.require(:item).permit(:a, :b)

但我想让它通过 strong_parametersgroup 包装器一起提交。我怎样才能做到这一点,但有上面提到的 POST 参数?

最佳答案

您可以在调用操作之前删除所有中间级别:

class YourController < ApplicationController
  before_action :flatten_item_params

  private

  def flatten_item_params
    params[:item] = params.require(:item).each_with_object({}) do |(key, value), result|
      result.merge!(value)
    end
  end

  def item_params
    params[:item].permit(:a, :b)
  end
end

关于ruby-on-rails - 解开 Rails POST params 散列并映射到具有强参数的模型属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34246843/

10-14 06:56