将布尔值转换为字符串

时间:2012-10-31 00:14:01

标签: ruby-on-rails ruby string

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

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

 t.funny = no #(boolean)

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

由于

3 个答案:

答案 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

意味着字符串布尔

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

在行动here

中查看

答案 1 :(得分:3)

您可以修补ActiveRecord或数据库的连接适配器(例如,PostgreSQL的pg gem),并将布尔值存储为字符串(例如YN)。

另一方面,如果您将所有内容存储为字符串,告诉我您不关心是否使用类型化架构。如果是这样,也许您可​​能想看看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"