【发布时间】:2014-06-19 14:06:57
【问题描述】:
我想创建一个具有数组属性的Sequel::Model。我在表中添加了varchar[] 列,并且可以使用Sequel::Dataset::update 成功更新记录。但是,如果我尝试在模型实例上设置属性并保存它,则会出现错误:
2.1.1 :048 > a = Sequel.pg_array(['public'])
=> ["public"]
2.1.1 :049 > DB[:oauth_access_tokens].where(id: 1).update(scopes: a)
I, [2014-06-19T09:53:49.009563 #40260] INFO -- : (0.003404s) UPDATE "oauth_access_tokens" SET "scopes" = ARRAY['public'] WHERE ("id" = 1)
=> 1
2.1.1 :050 > token = AccessToken.find(id: 1)
I, [2014-06-19T09:53:52.438038 #40260] INFO -- : (0.000771s) SELECT * FROM "oauth_access_tokens" WHERE ("id" = 1) LIMIT 1
=> #<AccessToken @values={:id=>1, :resource_owner_id=>2, :application_id=>1, :token=>"ec73426e2be81ab4772e67e139430d3896d705bcee6c141a38bd0e903e5df3eb", :refresh_token=>nil, :expires_in=>7200, :revoked_at=>nil, :created_at=>2014-06-06 12:37:07 -0400, :scopes=>["public"]}>
2.1.1 :051 > token.scopes = a
=> ["public"]
2.1.1 :052 > token.save
I, [2014-06-19T09:54:02.261076 #40260] INFO -- : (0.000332s) BEGIN
E, [2014-06-19T09:54:02.262007 #40260] ERROR -- : PG::InvalidTextRepresentation: ERROR: missing dimension value
LINE 1: ..." = '2014-06-06 12:37:07.485542-0400', "scopes" = '["public"...
^: UPDATE "oauth_access_tokens SET "resource_owner_id" = 2, "application_id" = 1, "token" = 'ec73426e2be81ab4772e67e139430d3896d705bcee6c141a38bd0e903e5df3eb', "refresh_token" = NULL, "expires_in" = 7200, "revoked_at" = NULL, "created_at" = '2014-06-06 12:37:07.485542-0400', "scopes" = '["public"]' WHERE ("id" = 1)
I, [2014-06-19T09:54:02.262691 #40260] INFO -- : (0.000229s) ROLLBACK
Sequel::DatabaseError: PG::InvalidTextRepresentation: ERROR: missing dimension value
LINE 1: ..." = '2014-06-06 12:37:07.485542-0400', "scopes" = '["public"...
Sequel 对 postgres 数组类型的支持是否可以实现我想要做的事情?如果是这样,我如何允许将token.scopes 设置为Array 或Sequel::Postgres::PGArray 并成功保存模型?
【问题讨论】:
标签: ruby postgresql sequel