我正在构建一个可以有不同类型答案的Answer ActiveRecord类。也就是说,答案可以是整数,浮点数,日期,字符串......等等......
我看待它的方式有两种方法来存储答案
1)
有一个名为“value”的属性被序列化。
这很好,因为您始终可以从同一个地方访问答案。搜索答案可能很糟糕,因为必须对数据进行反序列化才能使用(这是一个正确的假设吗?)
2)
有几个属性integerValue,floatValue等...
这是最容易搜索的(如果你知道你正在搜索什么类型(你可能会这样做))
这很糟糕,因为价值不在同一个地方,需要一些好的方法,如:
def value
stringValue||floatValue||integerValue
end
和一些验证,以确保只设置正确的
你会做什么?
答案 0 :(得分:2)
我会做两件事之一:
答案 1 :(得分:1)
将值转换为数据库中的字符串的原因。 并使用单表继承来定义类型并检索适当的值。
你有一个模型用两个字段回答:一个“值”,这是一个字符串 还有一个“类型”,它也是一个字符串,并获取值的类型。
然后对于浮动,你有以下内容:
class FloatAnswer < Answer
def value
attributes['value'].to_f
end
end
执行Answer.find(:all)
时,如果元素的值为FloatAnswer
,则会有一个FloatAnswer对象。不是答案之一。
因此,您只保留一个数据库字段,并始终以适当的格式显示数据。