pg_array适用于Model.new但不适用于Model.update()

时间:2014-07-13 14:33:14

标签: sinatra sequel

我在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"]传递。

似乎正确地为新记录选择了数组类型,但是在更新现有记录时却没有。谁能指出我出错的地方?

感谢。

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

获得答案后在此处更新