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 クラスを変更して、Question ではなく ActiveRecord::Base から継承するようにすると、シリアル化が機能します。しかし Question は ActiveRecord::Base を継承しているので何が問題なのかわかりません。

4

2 に答える 2

0

選択肢に新しいモデル (およびいくつかのデータベース テーブル) を追加することもできます。

class Choice < ActiveRecord::Base
    belongs_to :multiple_choice_question
end

class MultipleChoiceQuestion < Question
    has_many :choices
end
于 2012-07-29T12:16:53.137 に答える
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 に答える