Rails API: 无法将 JSON 字段属性列入白名单

Rails API: Cannot whitelist JSON field attribute

我正在构建一个 rails API,其模型包含 JSON 类型的属性 data。 (PSQL)

但是当我尝试post这样的事情时

{ model: { name: 'Hello', data: { a: 1, b: 2 } } }

Rails 认为 ab 是嵌套 data 关联的属性...然后认为它们是不允许的参数。 问题是,{ a: 1, b: 2 } 是我字段 data.

的值

如何为属性提供 JSON 值?

-

编辑:

显示的错误是:

Unpermitted parameters: name, provider, confidence, location_type, formatted_address, place_id, types, locality, ...

数据属性的值为{ name: 'Name', provider: 'Provider', ... }

就像我说的 Rails 认为它们是嵌套 data 关联的属性。

-

日志: Pastebin

如果事先不知道密钥,这可能是一种解决方法:

def model_params
   data_keys = params[:model].try(:fetch, :data, {}).keys
   params.require(:model).permit(data: data_keys)
end

归功于 aliibrahim,阅读讨论 https://github.com/rails/rails/issues/9454(P.S 似乎强大的参数将在 Rails 5.1 中支持此用例)

当你 post 某些东西时,你必须确保你的 json 具有与你的控制器相同的参数。

示例 rails api:

def example
 @model = Model.new(params)
 @model.save
 render(json: model.to_json, status: :ok)
end

def params
 params.permit(:name, :provider, {:data => [:a, :b]})
end

示例 front-end json post:

var body = {
 name: 'myName',
 provider: 'provider',
 data: {
  a: 'something',
  b: 'otherthing',
 }
};

出于某种原因 rails 无法识别嵌套的 json,因此您需要将 写入 params.permit data 将是具有该语法的 json,如果是数组,则 [] 应该为空。