2012-07-27 79 views
1

我试图创建一个具有表单的应用程序,他们有问题,谁又会有答案。这些问题需要不同类型的答案,例如自由文本或从一组可能的选项中选择(多选题)。不同类型的问题从基类继承问题。这是证明有问题的多选题。从Ruby on Rails序列化的NoMethodError

将会有不同的可能的答案集合(如1-5,1-8或是/否)有多个选择题。我正在考虑创建一个类MultipleChoiceQuestion < Question,答案选择以数组的形式给出,然后使用序列化保存到数据库。然而,我却无法让序列化工作。

从谷歌上搜索的时候,我已经数字,序列化,应当以书面工作:

class MultipleChoiceQuestion < Question 
    serialize :choices, Array 
end 

现在,如果我打开控制台轨道,并键入

q1 = MultipleChoiceQuestion.new 
    q1.choices 

我只得到选项的NoMethodError。有什么我需要做的序列化工作?我也尝试通过编辑迁移文件和迁移数据库来在数据库中添加文本列“选项”,但它也没有帮助。

我使用的是Rails 3.2.6和PostgreSQL 9.1。

更新:如果我将MultipleChoiceQuestion类更改为从ActiveRecord :: Base继承而不是Question继承,则序列化将起作用。但问题从ActiveRecord :: Base继承,所以我不明白问题是什么。

+0

是'Question'延长'的ActiveRecord :: Base'的新模式(和一些数据库表),例如:? – deefour 2012-07-27 15:12:26

回答

0

我平时做这样的事情:

class User < ActiveRecord::Base 
serialize :preferences, Hash 
end 

def preferences 
read_attribute(:preferences) || write_attribute(:preferences, {}) 
end 

,以确保其默认vaue是你所期望的。而且我标记了正在被序列化的文本类型的列,所以属性被存储为yaml。

user.preferences[:key] = value 
0

你也可以添加适合自己的选择

class Choice < ActiveRecord::Base 
    belongs_to :multiple_choice_question 
end 

class MultipleChoiceQuestion < Question 
    has_many :choices 
end