将数组添加到类(rails)

时间:2011-09-30 18:25:37

标签: ruby-on-rails arrays serialization

我想让我的类的一个属性成为一个数组。该类是“课程”,属性是Course.evals。

我尝试使用“序列化”,ala http://duanesbrain.blogspot.com/2007/04/ruby-on-rails-persist-array-to-database.html,但由于某种原因它无效。这是我的相关代码:

class Course < ActiveRecord::Base
  serialize :evals
end

但是当我进入控制台时,会发生这种情况:

ruby-1.9.2-p290 :043 > blah = Course.find(3)
 => #<Course id: 3, evals: nil> 
ruby-1.9.2-p290 :045 > blah.update_attribute :evals, "thing"
 => true 
ruby-1.9.2-p290 :047 > blah.evals << "thing2"
 => "thingthing2" 
ruby-1.9.2-p290 :048 > blah.save
 => true 
ruby-1.9.2-p290 :050 > blah.evals
 => "thingthing2" 

所以blah.evals&lt;&lt; “thing2”只是将“thing2”添加到现有的“thing”字符串中。它不会在任何数组中创建新条目。这是否意味着我的程序没有在模型中选择我的“序列化”命令?如果是这样,我该如何解决?

1 个答案:

答案 0 :(得分:1)

我认为问题在于,当您最初为属性分配值时,将其指定为字符串。如果要将其存储为数组,则需要将变量初始化为数组...

> blah = Course.find(3)
> blah.update_attribute :evals, ["thing"]

作为旁注,您可以向serialize方法添加一个可选参数,以确定在反序列化时属性应该具有哪个类...

class Course < ActiveRecord::Base
  serialize :evals, Array
end