新手问题 [已解决] 在 Rails 4.0.2 中使用 hstore…

cassiuschen · 2014年02月18日 · 最后由 cassiuschen 回复于 2014年02月19日 · 2741 次阅读

请教一下在 Rails 中使用 hstore 类型保存 Hash……Postgresql 版本是 9.1 和 9.3……安装了 gem:activerecord-postgres-hstore,然后 migrate 也开启了 hstore,但是实际操作总是抛出对于数据{ :something => :something }Hash 没有找到 scan() 方法………找了很久解决办法但是没找到相关资料…………还求好心人帮个忙>~<

我现在在 User 这个 Model 下有个extra:hstore, 在app/models的 class User 中也写了

class User < ActiveRecord::Base
  serialize :extra, ActiveRecord::Coders::Hstore
end

提交数据的时候就写的

u = User.new
u.extra = { type: "admin" }
u.save

这样……


解决方法: Rails4 之后默认支持 hstore 了,不用安装 Gem 和相关配置,删掉就好了…

hstore 和 store 有啥区别哦,没用过 hstore ...

#1 楼 @chunlea 谢了!原来已经不需要那个 gem 了……

#2 楼 @small_fish__ 在没有太大性能要求的时候用来做 key-value 存储嘛…

#4 楼 @cassiuschen store 也可以实现同样功能啊,每发现有太大区别。

#5 楼 @small_fish__ 不知道能不能这么理解…一般 store 类型数据存入之后每个数据一行,没有数据就存入 nil,hstore 给 hash 单开一行,储存的所有键值都在这一行, 举例说:

User:
  id:integer
  name:string
  extra:hstore

对于

u1 = User.new(
  id: 1,
  extra: { name: "Bob" }
)
u1.save
#<User id=1, name=nil, extra={'name'=>'Bob'}>

u2 = User.new(
  id: 2,
  name: "Bob",
  extra: { age: 18 }
)
u2.save
#<User id=2, name='Bob', extra={'ago'=>18}>

之类的都是可以同时存在的………一些信息新建、取用更自由更方便……

#5 楼 @small_fish__ hstore 可以索引,里面的字段可以作为查询条件。如果没这个需求就差别不大。

#7 楼 @Rei 还是 Rei 比较厉害😚

需要 登录 后方可回复, 如果你还没有账号请 注册新账号