ruby-on-rails - 如何在 Rails 中使用带有嵌套数组的 PostgreSQL hstore?

标签 ruby-on-rails arrays postgresql hash hstore

迁移:

class Preference < ActiveRecord::Migration

  def change
    enable_extension 'hstore'

    create_table :preferences do |t|
      t.hstore :prefs
    end
  end
end

型号:

class Preference < ActiveRecord::Base
  store_accessor :prefs
end

如果 prefs 是诸如 { email:'yes' } 之类的散列,这似乎有效,但不适用于内部包含数组的散列:{ email:[ 'monday ', '星期二']}.

拉出哈希时,数组被保存为 JSON。

是否有将 hstore 与嵌套哈希和数组一起使用的好方法?

我确实尝试将 array:true 添加到迁移中,但这似乎只允许保存数组而不是哈希。

如何将 Rails PostgreSQL hstore 与嵌套哈希和数组一起使用?

Rails 4.2.4,PostgreSQL 9.3.5

最佳答案

PostgreSQL hstore 旨在存储文本字符串的键值对。看看 hstore docs .

我使用 JSON 类型将数组存储为散列中的值。有两种 JSON 数据类型:JSON 和 JSONB。 JSONB 支持索引但速度稍慢,而 JSON 不支持索引但速度更快。您可以在这里阅读它们:JSON Type .

我会做以下事情:

class Preference < ActiveRecord::Migration
  def change
    create_table :preferences do |t|
      t.json :prefs
    end
  end
end

旁注中,在 hstore 列上设置 array: true 意味着您要存储一个 hstores 数组。

关于ruby-on-rails - 如何在 Rails 中使用带有嵌套数组的 PostgreSQL hstore?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32877386/

相关文章:

java - 如何使用抽象类来简化 MVC 框架中的模型创建?

java - 按列将字符串读入数组

arrays - 如何在 Rust 中映射数组引用

sql - 从 Slick 3.x 中的分组依据中按列选取最大项目

ruby-on-rails - Nginx ssl_protocol 设置不起作用

mysql - 无法安装 mysql2 gem

ruby-on-rails - Rails number_field 十进制值的替代方案

c++ - 分配给动态数组时,是否会在 C++ 中分配内存?

sql - 合并所有子查询中的结果

sql - 无法删除被授予连接数据库的角色