Rails Postgresql数组的hstore

时间:2013-04-03 09:07:41

标签: ruby-on-rails hstore

有人知道是否可以在rails 4中安装hstore数组?我试过

add_column :orders, :frozen_content, :hstore , array: true

但我得到了

 PG::Error: ERROR:  malformed array literal: 

当我尝试保存时

3 个答案:

答案 0 :(得分:3)

原则上,是的,但是你发现它在保存时没有被正确转义。我今天刚刚记录了一个问题,请参阅https://github.com/rails/rails/issues/11135(包括修补补丁和一些演示代码)

答案 1 :(得分:2)

这是至少在Rails 4.0.1中存在的错误。

A pull request was proposed to fix it,但在合并之前,你可以修补Rails:

# config/initializers/extensions/postgres.rb
module ActiveRecord
  module ConnectionAdapters
    class PostgreSQLColumn < Column
      module Cast
        private

          def quote_and_escape(value)
            case value
            when "NULL"
              value
            else
              "\"#{value.gsub(/(["\\])/, '\\\\\1')}\""
            end
          end
      end
    end
  end
end

Sidenote,我在Rails控制台中测试它时遇到了麻烦,因为初始化程序没有在那里加载。你可以这样做:

load "#{Rails.root}/config/initializers/extensions/postgres.rb"

答案 2 :(得分:0)

你可以起诉activerecord-postgres-hstore gem:

https://github.com/engageis/activerecord-postgres-hstore

来自文档:

  1. 创建一个支持hstore的字段:

    class Person&lt;的ActiveRecord :: Base的    serialize:data,ActiveRecord :: Coders :: Hstore 端

  2. 将字段添加到其中:

    person = Person.new person.data ['foo'] ='酒吧' person.save

  3. 查询:

    Perosn.where(“data - &gt;'foo'='bar'”)

  4. Railscast#345(在付费墙后面)使用activerecord-postgres -hstore gem在更多细节中使用hstore:

    http://railscasts.com/episodes/345-hstore

    注意:我没有尝试使用rails 4 ... YMMV。