我有用户模型,数据库字段'评论'。我使用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类型的数据库字段?我做错了什么?
答案 0 :(得分:1)
将自定义编码器添加到 store :
class User < ActiveRecord::Base
store :remark, accessors: [ :info ], coder: HstoreCoder
#some code
end
HstoreCoder 类:
class HstoreCoder
class << self
def load(hash)
hash
end
def dump(value)
value.to_hash
end
end
end
应该有所帮助。
答案 1 :(得分:0)
对于Rails 5和hstore,使用store_accessor
代替store
store_accessor :remark, :info
注意:如果您使用的是PostgreSQL特定的列(如hstore或json),则不需要.store提供的序列化。只需使用.store_accessor即可生成访问器方法。请注意,这些列使用字符串键哈希,并且不允许使用符号进行访问。