1

somoone は、レール 4 で hstore の配列を使用できるかどうかを知っていますか? 私は試してみました

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

しかし、私は得ました

 PG::Error: ERROR:  malformed array literal: 

保存しようとすると

4

3 に答える 3

3

原則として、はい、しかし、保存時に正しくエスケープされていないことがわかりました。今日、それに関する問題を記録しました。https://github.com/rails/rails/issues/11135を参照してください(修正パッチといくつかのデモ コードが含まれています)

于 2013-06-27T14:31:59.273 に答える
2

これは少なくとも Rails 4.0.1 に存在するバグです。

それを修正するためにプル リクエストが提案されましたが、マージされるまでは、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

補足として、初期化子がそこにロードされていなかったため、Rails コンソールでこれをテストするのに問題がありました。あなたはそうすることができます:

load "#{Rails.root}/config/initializers/extensions/postgres.rb"
于 2013-11-30T14:19:19.287 に答える
0

activerecord-postgres-hstore gem を訴えることができます:

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

ドキュメントから:

  1. hstore-backed フィールドを作成します。

    class Person < ActiveRecord::Base serialize :data, ActiveRecord::Coders::Hstore end

  2. それにフィールドを追加します。

    person = Person.new person.data['foo'] = 'bar' person.save

  3. クエリします:

    Perosn.where("データ -> 'foo' = 'バー'")

Railscast #345 (ペイウォールの背後にあります) では、activerecord-postgres-hstore gem を使用して、hstore の使用について詳しく説明しています。

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

注:Rails 4 ... YMMVでは試していません。

于 2013-04-17T20:11:09.283 に答える