somoone は、レール 4 で hstore の配列を使用できるかどうかを知っていますか? 私は試してみました
add_column :orders, :frozen_content, :hstore , array: true
しかし、私は得ました
PG::Error: ERROR: malformed array literal:
保存しようとすると
somoone は、レール 4 で hstore の配列を使用できるかどうかを知っていますか? 私は試してみました
add_column :orders, :frozen_content, :hstore , array: true
しかし、私は得ました
PG::Error: ERROR: malformed array literal:
保存しようとすると
原則として、はい、しかし、保存時に正しくエスケープされていないことがわかりました。今日、それに関する問題を記録しました。https://github.com/rails/rails/issues/11135を参照してください(修正パッチといくつかのデモ コードが含まれています)
これは少なくとも 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"
activerecord-postgres-hstore gem を訴えることができます:
https://github.com/engageis/activerecord-postgres-hstore
ドキュメントから:
hstore-backed フィールドを作成します。
class Person < ActiveRecord::Base serialize :data, ActiveRecord::Coders::Hstore end
それにフィールドを追加します。
person = Person.new person.data['foo'] = 'bar' person.save
クエリします:
Perosn.where("データ -> 'foo' = 'バー'")
Railscast #345 (ペイウォールの背後にあります) では、activerecord-postgres-hstore gem を使用して、hstore の使用について詳しく説明しています。
http://railscasts.com/episodes/345-hstore
注:Rails 4 ... YMMVでは試していません。