1

我正在尝试创建一个应用程序,它有表格,有问题,又有答案。这些问题需要不同类型的答案,例如自由文本或从一组可能的选项中进行选择(多项选择题)。不同类型的问题继承自基类 Question。事实证明,选择题是有问题的。

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

通过谷歌搜索,我发现序列化应该通过以下方式工作:

class MultipleChoiceQuestion < Question
    serialize :choices, Array
end

现在,如果我打开 rails 控制台,然后输入

  q1 = MultipleChoiceQuestion.new
  q1.choices

我只得到一个 NoMethodError 的选择。我还需要做些什么才能使序列化工作吗?我还尝试通过编辑迁移文件并迁移数据库在数据库中添加文本列“选择”,但这也无济于事。

我正在使用 Rails 3.2.6 和 PostgreSQL 9.1。

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

4

2 回答 2

0

我通常会这样做:

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

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

以确保其默认值是您所期望的。我标记了正在序列化的文本类型列,因此属性存储为 yaml。

user.preferences[:key]  = value
于 2012-07-27T15:15:09.907 回答
0

您还可以为选择添加一个新模型(和一些数据库表),例如:

class Choice < ActiveRecord::Base
    belongs_to :multiple_choice_question
end

class MultipleChoiceQuestion < Question
    has_many :choices
end
于 2012-07-29T12:16:53.137 回答