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)
| 归档时间: |
|
| 查看次数: |
4528 次 |
| 最近记录: |