1

データベースに保存されているデータを標準化しようとしています。すべてを文字列として保存したいという意味で。すべてのデータ型をRailsの文字列に変換する最良の方法は何ですか?

したがって、データベースに次のようなものがある場合:

 t.funny = no #(boolean)

何百ものこれらをループ内の文字列に変換する場合、これを行うための最良の方法は何ですか?

ありがとう

4

3 に答える 3

3

モンキーパッチは受け入れられましたか?:)

ここに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

ブール値を文字列化することを意味します

非ブール値はそのまま返されることに注意してください

ここで実際の動作を確認してください

于 2012-10-31T00:25:26.873 に答える
3

ActiveRecordまたはデータベースの接続アダプター(たとえば、pgPostgreSQLのgem)にモンキーパッチを適用して、ブール値を文字列(たとえば、YまたはN)として格納することができます。

一方、すべてを文字列として保存している場合は、型付きスキーマを使用する必要はありません。もしそうなら、おそらくあなたはNoSQL(特にMongoDBとCouchDBは強力なRails統合を持っています)のような代替案を見てみたいと思うかもしれません。そこではすべてが本質的にキー=>値の単なる「ドキュメント」です。

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