データベースに保存されているデータを標準化しようとしています。すべてを文字列として保存したいという意味で。すべてのデータ型をRailsの文字列に変換する最良の方法は何ですか?
したがって、データベースに次のようなものがある場合:
t.funny = no #(boolean)
何百ものこれらをループ内の文字列に変換する場合、これを行うための最良の方法は何ですか?
ありがとう
データベースに保存されているデータを標準化しようとしています。すべてを文字列として保存したいという意味で。すべてのデータ型をRailsの文字列に変換する最良の方法は何ですか?
したがって、データベースに次のようなものがある場合:
t.funny = no #(boolean)
何百ものこれらをループ内の文字列に変換する場合、これを行うための最良の方法は何ですか?
ありがとう
モンキーパッチは受け入れられましたか?:)
ここに1つあります:
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
ブール値を文字列化することを意味します
非ブール値はそのまま返されることに注意してください
ActiveRecordまたはデータベースの接続アダプター(たとえば、pg
PostgreSQLのgem)にモンキーパッチを適用して、ブール値を文字列(たとえば、Y
またはN
)として格納することができます。
一方、すべてを文字列として保存している場合は、型付きスキーマを使用する必要はありません。もしそうなら、おそらくあなたはNoSQL(特にMongoDBとCouchDBは強力なRails統合を持っています)のような代替案を見てみたいと思うかもしれません。そこではすべてが本質的にキー=>値の単なる「ドキュメント」です。
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"