我试图标准化存储在我的数据库中的数据。从某种意义上说,我希望所有内容都存储为字符串。将所有数据类型转换为rails中的字符串的最佳方法是什么?
所以如果我的数据库中有这样的东西:
t.funny = no #(boolean)
如果我在一个循环中将数百个这些字符串转换为字符串,那么最好的方法是什么?
谢谢
我试图标准化存储在我的数据库中的数据。从某种意义上说,我希望所有内容都存储为字符串。将所有数据类型转换为rails中的字符串的最佳方法是什么?
所以如果我的数据库中有这样的东西:
t.funny = no #(boolean)
如果我在一个循环中将数百个这些字符串转换为字符串,那么最好的方法是什么?
谢谢
您可以对 ActiveRecord 或数据库的连接适配器(例如,pg
PostgreSQL 的 gem)进行猴子补丁,并让它将布尔值存储为字符串(例如,Y
或N
)。
另一方面,如果您将所有内容存储为字符串,这告诉我您不关心有类型的模式。如果是这样,也许您可能想看看 NoSQL (尤其是 MongoDB 和 CouchDB 具有强大的 Rails 集成)之类的替代方案,其中一切都只是本质上键 => 值的“文档”。
猴子补丁被接受了吗?:)
这是一个:
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
意味着字符串布尔
请注意,非布尔值将按原样返回
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"