1

我试图标准化存储在我的数据库中的数据。从某种意义上说,我希望所有内容都存储为字符串。将所有数据类型转换为rails中的字符串的最佳方法是什么?

所以如果我的数据库中有这样的东西:

 t.funny = no #(boolean)

如果我在一个循环中将数百个这些字符串转换为字符串,那么最好的方法是什么?

谢谢

4

3 回答 3

3

您可以对 ActiveRecord 或数据库的连接适配器(例如,pgPostgreSQL 的 gem)进行猴子补丁,并让它将布尔值存储为字符串(例如,YN)。

另一方面,如果您将所有内容存储为字符串,这告诉我您不关心有类型的模式。如果是这样,也许您可​​能想看看 NoSQL (尤其是 MongoDB 和 CouchDB 具有强大的 Rails 集成)之类的替代方案,其中一切都只是本质上键 => 值的“文档”。

于 2012-10-31T01:13:46.810 回答
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

意味着字符串布尔

请注意,非布尔值将按原样返回

在此处查看实际操作

于 2012-10-31T00:25:26.873 回答
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"
于 2012-10-31T22:16:56.160 回答