如果我将哈希值保存到数据库
hash_value = {"1"=>"val1", "2"=>"val2", "3"=>"val3", "4"=>"val4"}
@page.update(hash: hash_value)
然后尝试循环遍历page
页面
hash = @page.hash
<%= hash.each do |key, value| %>
<%= value %>
<% end %>
我收到错误undefined method 'each' for #<String:0x007fdda1d8b568>
。这个错误让我意识到它被保存为保存为数据库的字符串。
如何将其保存为哈希值,所以当我从数据库中提取它时,它是一个散列而不是一个字符串?做了一些研究我发现serialize
,但我无法弄清楚如何正确使用它。是否用于更改数据库表以使该表中保存的所有值都为哈希值?如果是这样,迁移文件中添加了什么来做到这一点?
create_table :pages do |t|
t.timestamps null: false
t.text :title
t.text :content_top
t.text :content_bottom
t.text :hash
t.timestamps null: false
end
对于如何将哈希值保存到数据库并将其作为哈希调用完成而感到困惑。
答案 0 :(得分:4)
:hash on:pages表的列类型是text,这是您希望列存储哈希时使用的正确列类型。您现在还必须在页面模型上指明您希望序列化此列。像这样:
class Page < ActiveRecord::Base
serialize :hash
然后您可以尝试像这样测试新设置:
@page = Page.new
@page.hash = {"1"=>"val1", "2"=>"val2", "3"=>"val3", "4"=>"val4"}
@page.save
答案 1 :(得分:3)
您可以使用:json数据类型,在最新的postgres 9.3版本中可用,它可以很容易地保存哈希。
答案 2 :(得分:1)
您应该将serialize :hash
用于模型,然后在保存到数据库时使用它。