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

acruukt9  于 2023-08-08  发布在  Ruby
关注(0)|答案(3)|浏览(106)

我正在使用包含JSON类型的属性data的模型构建一个rails API。(项目SQL)
但是当我试着发布这样的东西
{型号:{名称:“你好”,数据:{ a:1,B:2 }
Rails认为ab是嵌套的data关联的属性...它会将它们视为不允许的参数。问题是,{ a: 1, b: 2 }是我的字段data的值。
如何为属性提供JSON值?

编辑:

显示的错误为:
不允许的参数:名称、提供程序、可信度、位置类型、格式化地址、地点ID、类型、位置...
data属性的值为{ name: 'Name', provider: 'Provider', ... }
就像我说的,Rails认为它们是嵌套的data关联的属性。
日志:Pastebin

ny6fqffe

ny6fqffe1#

如果密钥是事先未知的,这可能是一种变通方法:

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中支持此用例)

chhqkbe1

chhqkbe12#

当你发布一些东西时,你必须确保你的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

字符串
post的前端json示例:

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


由于某种原因,rails无法识别嵌套的json,所以你需要写入params.permitthatdata将是一个具有该语法的json,如果是数组,**[]**应该为空。

dwthyt8l

dwthyt8l3#

如果使用Rails v7

def model_params
      params.require(:model).permit(:name, data: {})
    end

字符串
Reference

相关问题