YAMLに書き込んだrubyクラスの逆シリアル化に問題があります。
なりたいところ
1つのオブジェクトを、質問テキスト、いくつかの可能な回答(複数選択の場合)、および正解を含む完全な「質問」として渡すことができるようにしたいと思います。1つのモジュール(エンコーダー)が入力を受け取り、そこから「質問」クラスを作成して、質問プールに追加します。別のモジュールが質問プールを読み取り、「質問」オブジェクトの配列を作成します。
私が現在いる場所
サンプル質問プール
--- |
--- !ruby/object:MultiQ
a: "no"
answer: "no"
b: "no"
c: "no"
d: "no"
text: "yes?"
YAMLファイルへのエンコーダーダンプ。オブジェクトは、入力で満たされたMultiQです。(下記参照。)
def dump(file, object)
File.open(file, 'a') do |out|
YAML.dump(object.to_yaml, out)
end
object = nil
end
MultiQクラスの定義
class MultiQ
attr_accessor :text, :answer, :a, :b, :c, :d
def initialize(text, answer, a, b, c, d)
@text = text
@answer = answer
@a = a
@b = b
@c = c
@d = d
end
end
デコーダー(私はさまざまなことを試みてきたので、ここにあるのは私の最初または最良の推測ではありませんでした。しかし、私は途方に暮れていて、ドキュメントは実際に物事を十分に完全に説明していません。)
File.open( "test_set.yaml" ) do |yf|
YAML.load_documents( yf ) { |item|
new = YAML.object_maker( MultiQ, item)
puts new
}
end
あなたが答えることができる質問
- どうすれば目標を達成できますか?Rubyクラスを正常に逆シリアル化するには、ファイルまたはドキュメントの解析、読み込みの間にどのメソッドを使用する必要がありますか?私はすでにYAMLRdocを調べましたが、あまり吸収していなかったので、リンクするだけではいけません。
- 他にどのような方法を使用することをお勧めしますか?このような質問を保存するためのより良い方法はありますか?ドキュメントデータベース、リレーショナルデータベース、xmlを使用する必要がありますか?他のフォーマット?