我在PostgreSQL支持的Sinatra RESTful API中使用Sequel,并且有几个整数[]类型的列。
我已注册:pg_array
扩展名并保存新记录正常:
x = MyModel.new(params[:mymodel])
x.save
但是,当我呼叫更新时:
data = JSON.parse(request.body.read)['mymodel']
x = MyModel.where(:id => params[:id])
x.update(data)
失败并出现以下错误:
Sequel::DatabaseError - PG::InvalidTextRepresentation: ERROR: array value must
start with "{" or dimension information
LINE 1: ...olumn2" = NULL, "column3" = 'Some Text', "arrayField" = ('1'), "col...
^
该列定义为integer :arrayField, :type => "integer[]"
,并且在对API的创建和更新调用中,数组字段的JSON表示形式将作为"arrayField":["1"]
传递。
似乎正确地为新记录选择了数组类型,但是在更新现有记录时却没有。谁能指出我出错的地方?
感谢。
答案 0 :(得分:0)
原来我正在调用数据集 .update而不是模型 .update。
解决方案是使用.first而不是.where ...
data = JSON.parse(request.body.read)['mymodel']
x = MyModel.first(:id => params[:id])
x.update(data)
通过https://groups.google.com/d/msg/sequel-talk/w6DBa6mb3rc/UmlYaWD8tXYJ
获得答案后在此处更新