序列化列始终在Rails中保存为null

时间:2011-03-27 09:57:30

标签: ruby-on-rails ruby database serialization hash

我想要做的就是在Ruby on Rails应用程序中的数据库列中保存二维哈希。我只是在学习如何使用框架,这个任务给我带来了很多的悲伤。我尽力不犯任何愚蠢的错误,但我相信我的问题源于一个。

所以我正在做的是在控制器中创建哈希并将其设置为对象中字段的值,然后调用save。

代码:

@instance = Model.find(:first, :conditions => "id = 1"}

@instance.hash_field = Hash.new { |h, k| h[k] = Hash.new { |h1, k1| h1[k1] =0 }} 

@instance.other_field = "some string"

@instance.save

other_field将保存其新值,并且该值在数据库的后续检索中仍然存在。当我再次将实例拉出数据库时,'hash_field'将始终重置为nil。尽管'@ instance.hash_field'的值在控制器和视图中具有正确的值,但仍会发生这种情况。这使我有信心说将数据库保存到数据库是一个问题。

我有声明

:serialize :hash_field
在我的模型中

,并且它在数据库表中的列被声明为具有类型“text”。任何指针都会让我成为一个非常幸福的人。

-Chris

2 个答案:

答案 0 :(得分:1)

  1. 'serialize'是一种方法。
  2. Hash.new { |h, k| h[k] = Hash.new { |h1, k1| h1[k1] =0 }} => {}
  3. 请提供用于哈希的测试数据。

答案 1 :(得分:0)

摆脱序列化前面的“:”:

class Model < ActiveRecord::Base
  serialize :hash_field

end