我试图标准化存储在我的数据库中的数据。在某种意义上,我希望一切都存储为字符串。什么是将所有数据类型转换为rails中的字符串的最佳方法?
所以如果我的数据库中有这样的东西:
t.funny = no #(boolean)
如果我将数百个这些转换为循环中的字符串,那么最好的方法是什么?
由于
答案 0 :(得分:3)
接受猴子补丁? :)
这里有一个:
class Object
def to_sb
return 'no' if [FalseClass, NilClass].include?(self.class)
return 'yes' if self.class == TrueClass
self
end
end
v = true
v.to_sb
=> "yes"
v = nil
v.to_sb
=> "no"
v = false
v.to_sb
=> "no"
v = 'blah'
v.to_sb
=> "blah"
现在,在您的模型中,您可以使用t.funny.to_sb
意味着字符串布尔
请注意,非布尔值将按原样返回
答案 1 :(得分:3)
您可以修补ActiveRecord或数据库的连接适配器(例如,PostgreSQL的pg
gem),并将布尔值存储为字符串(例如Y
或N
)。
另一方面,如果您将所有内容存储为字符串,告诉我您不关心是否使用类型化架构。如果是这样,也许您可能想看看NoSQL(MongoDB和CouchDB,尤其是具有强Rails集成)等替代方案,其中所有内容都只是一个基本上是key =>的“文档”。值。
答案 2 :(得分:0)
false和nil都被视为相同,因此代码可以写为
class Object
def to_bool
return 'no' unless self
return 'yes' if self.class == TrueClass
self
end
end
结果:
v = true
v.to_sb
=> "yes"
v = nil
v.to_sb
=> "no"
v = false
v.to_sb
=> "no"
v = 'blah'
v.to_sb
=> "blah"