将对象存储在CSV文件中,而不将其类更改为字符串

时间:2016-01-18 10:33:03

标签: ruby class csv

我将一些配方实例存储在CSV文件中,如下所示:

def add_recipe(recipe)
  CSV.open(@filepath, 'ab', @csv_options) do |csv|
    csv << [recipe, recipe.name, recipe.description, false]
  end
end

recipeRecipe级的强烈要求。 在文件中,我有这样的东西:

"#<Recipe:0x007fee9bbbab48>", "name1", "description1", "false"
"#<Recipe:0x007fee9bbbab49>", "name2", "description2", "false"

问题在于,当我想用​​row[0]或带有row[2]的布尔值检索存储在每一行中的对象时,我得到一个包含对象或布尔值的字符串。

如何获取具有Recipe或boolean但不是字符串的原始类的对象?

2 个答案:

答案 0 :(得分:1)

你做不到。使用CSV是不可能的(除非您为CSV创建自己的序列化方法)。 .........................

答案 1 :(得分:1)

您在第一列中存储的内容是recipe.to_s的结果,它只不过是具有类类型和对象ID编码的字符串。这与序列化对象不同。

您必须按照已经完成的方式编写食谱的每个属性,而不是将recipe本身写入一行。

csv << [recipe.id, recipe.name, recipe.description, recipe.other_attribute]