Rails-如何在将哈希表从数据库中拉出后将其保存到数据库并将其用作哈希表(而不是将其作为字符串)

Rob*_*Rob 5 ruby hash ruby-on-rails ruby-on-rails-4

如果我将哈希保存到数据库

hash_value = {"1"=>"val1", "2"=>"val2", "3"=>"val3", "4"=>"val4"}
@page.update(hash: hash_value)
Run Code Online (Sandbox Code Playgroud)

然后尝试遍历page页面上哈希的每个键

hash = @page.hash 

<%= hash.each do |key, value| %>

 <%= value %>

<% end %>
Run Code Online (Sandbox Code Playgroud)

我得到了错误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
Run Code Online (Sandbox Code Playgroud)

只是对如何将哈希保存到数据库并将其作为哈希调用而感到困惑。

小智 5

:pages表上的:hash的列类型是text,这是您希望列存储哈希值时要使用的正确列类型。现在,您还必须在Page模型上指示您希望序列化此列。像这样:

class Page < ActiveRecord::Base
  serialize :hash
Run Code Online (Sandbox Code Playgroud)

然后,您可以尝试像这样测试新的设置:

@page = Page.new
@page.hash = {"1"=>"val1", "2"=>"val2", "3"=>"val3", "4"=>"val4"}
@page.save
Run Code Online (Sandbox Code Playgroud)