【发布时间】:2015-12-25 19:00:46
【问题描述】:
我有一个带有数据库字段'remark'的用户模型。我使用 Postgres 作为数据库,'remark' 字段的类型是 HSTORE。所以'remark'存储了一个带有额外用户信息的散列。
根据某人的建议,我向我的“用户”模型添加了一个商店,如下所示:
class User < ActiveRecord::Base
store :remark, accessors: [ :info ]
#some code
end
现在我可以通过使用此访问器 '@user.info' 来获取 @user.remark['info'] 中的值。这很好用。但是当我尝试设置并保存这样的新值时:
@user.info = "some info"
@user.save
我收到以下错误:
ActiveRecord::StatementInvalid: PG::InternalError: ERROR: Syntax error near '!' at position 4
这样可以使用 HSTORE 类型的数据库字段吗?我做错了什么?
【问题讨论】:
-
您发布的代码看起来不错。您确定异常来自设置 hstore 值吗?您是否有任何可能引发错误的回调?生成的 sql update 命令是什么样的(在控制台中尝试或查看您的 rails 日志)。
-
SQL (0.8ms) UPDATE "users" SET "remark" = $1, "updated_at" = $2 WHERE "users"."id" = $3 [["remark", "--- ! ruby/hash:ActiveSupport::HashWithIndifferentAccess\ninfo:dit zou moeten werken\n"], ["updated_at", "2015-09-28 13:22:04.216668"], ["id", 1]] PG:: InternalError: 错误: '!' 附近的语法错误在第 4 位:UPDATE "users" SET "remark" = $1, "updated_at" = $2 WHERE "users"."id" = $3
-
它是否适用于
@user.remark['info'] = "some info"; @user.save? -
no 也不起作用。我刚刚看到@user.save 不起作用。即使我不更改实例。当我从模型中删除“store :remark, accessors: [ :info ]”时,它确实有效。 (使用 rails 4.2 和 ruby2.1.1)
标签: ruby-on-rails postgresql store hstore