フォームがあり、質問があり、回答があるアプリケーションを作成しようとしています。質問には、さまざまな種類の回答が必要です。たとえば、フリー テキストや一連の可能な選択肢からの選択 (多肢選択式の質問) などです。さまざまなタイプの質問は、基本クラス 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 クラスを変更して、Question ではなく ActiveRecord::Base から継承するようにすると、シリアル化が機能します。しかし Question は ActiveRecord::Base を継承しているので何が問題なのかわかりません。