我想让我的类的一个属性成为一个数组。该类是“课程”,属性是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”字符串中。它不会在任何数组中创建新条目。这是否意味着我的程序没有在模型中选择我的“序列化”命令?如果是这样,我该如何解决?
答案 0 :(得分:1)
我认为问题在于,当您最初为属性分配值时,将其指定为字符串。如果要将其存储为数组,则需要将变量初始化为数组...
> blah = Course.find(3)
> blah.update_attribute :evals, ["thing"]
作为旁注,您可以向serialize方法添加一个可选参数,以确定在反序列化时属性应该具有哪个类...
class Course < ActiveRecord::Base
serialize :evals, Array
end