jpw*_*ynn 9 ruby hash activerecord
是否有Ruby或Activerecord方法可以在数据库字段中写入和读取哈希值?
我需要编写一个Web实用程序来接受POST数据并将其保存到数据库中,然后再以原始哈希形式从数据库中提取它.但理想情况下,不要"了解"结构是什么.换句话说,我的数据存储需要独立于任何特定的散列键集.
例如,有一次外部应用程序可能会POST到我的应用程序:
"user" => "Bill",
"city" => "New York"
Run Code Online (Sandbox Code Playgroud)
但另一次外部应用程序可能会POST到我的应用程序:
"company" => "Foo Inc",
"telephone" => "555-5555"
Run Code Online (Sandbox Code Playgroud)
因此,我的实用程序需要将任意哈希保存到text数据库中的字段,然后,稍后从已保存的内容重新创建哈希.
Xav*_*ier 18
Rails 4增加了对Postgres hstore数据类型的支持,它允许您将哈希直接添加到您的(postgres)数据库中.
如果您使用的是Rails 4和Postgres,则可以hstore在迁移中使用:
def up
execute "create extension hstore"
add_column :table, :column, :hstore
end
def down
remove_column :table, :column
end
Run Code Online (Sandbox Code Playgroud)
该执行命令将在Postgres中启用hstore,因此您只需执行一次.
这将使您能够:column像存储任何其他数据类型一样存储哈希.
有两种方法可以做到这一点:
第一种方法的问题在于寻找和操纵是困难且昂贵的.例如,与以常规表格格式存储数据相比,在Foo Inc.工作的所有员工的电话号码之前的前缀为"0"将是一场噩梦.
您的架构将是:
employees (id, created_at, updated_at)
employee_details (id, employee_id, key, value)
Run Code Online (Sandbox Code Playgroud)
所以,要存储
"company" => "Foo Inc",
"telephone" => "555-5555"
Run Code Online (Sandbox Code Playgroud)
你会这样做:
employees: 1, 2012-01-01, 2012-01-01
employee_details (1, 1, "company", "Foo Inc"), (2, 1, "telephone", "555-5555")
Run Code Online (Sandbox Code Playgroud)
这种方法的缺点:Rails本身不支持这种模式.
| 归档时间: |
|
| 查看次数: |
15577 次 |
| 最近记录: |