4

我使用 Rails 的 .to_json() 方法将我的哈希转换为 JSON。

哈希:

{ "Größe" => "XL" }

JSON:

"{\"Gr\\u00f6\\u00dfe\":\"XL\"}"

之后,JSON 字符串存储在这个 Rails (3.2.6) SQL 命令称为静态的 hstore (Postgres) 列中:

UPDATE ... "static" = 'options=>"{\"Gr\u00f6\u00dfe\":\"XL\"}"' WHERE ...

已经缺少一个转义反斜杠。

在数据库本身中,静态列如下所示:

"options"=>"{\"Gru00f6u00dfe\":\"XL\"}"

u00f6u00dfe的所有反斜杠都消失了。

JSON.parse() 不再识别多字节字符,因此它返回以下哈希:

{ "Gru00f6u00dfe" => "XL" }

有谁知道如何防止这种情况?谢谢你的帮助!

4

1 回答 1

0

开箱即用,rails 不支持 PostgreSQL 的 hstore。但修复很容易,只需使用activerecord-postgres-hstoregem。使用activerecord-postgres-hstore将使您摆脱序列化或编码问题。这里是如何

1)安装gem然后将静态列类型更改为hstore

class ChangeHStoreDateTypeInMyTable < ActiveRecord::Migration
  def change
   change_column :my_table, :static, :hstore
  end

2) 添加索引

CREATE INDEX my_table_gin_static ON my_table USING GIN(static);

3)现在,您可以像往常一样实例化模型实体并更新值,而无需担心序列化或编码。

@model.static["Größe"] = "XL"

更多信息:https ://github.com/softa/activerecord-postgres-hstore

于 2012-09-20T04:13:50.707 回答