0

csv としてエクスポートする生データを含む .numbers スプレッドシートがあり、カスタム ビルドのインポート ツールを使用してそのデータを Rails アプリにインポートします。Numbersには、ブール値フィールドを示す1orを入力するだけの列がいくつかあります。0

次は、モデルの 1 つで行を検証します。

  validates :powered,
    inclusion: [true, false]

インポートされている値が1あり、値が検証されているかどうかを確認しているためtruefalseこれは明らかに検証されておらず、失敗しています。

元のスプレッドシートまたはエクスポートされた csv を変更せずに、 csv マップから標準ブール値またはPostgres DB および Rails アプリで と1を作成するにはどうすればよいですか?0truefalse

4

2 に答える 2

2

1or0trueorに変換するには、コールバックを使用しますfalse。次のようなもの:

before_validation :powered_to_bool
...

def powered_to_bool
  self.powered = true if self.powered == 1
  self.powered = false if self.powered == 0
end
于 2013-08-13T22:31:39.423 に答える
1

検証はモデルが DB に保存される前に行われるため、変換 (通常は DB 固有 - MySQL はブール値を Postgres とは異なる方法で保存します) は発生しません。

before_validationCSV から抽出するときと検証する前に、コールバックを使用して値をマッサージする必要がある場合があります。詳細については、 ActiveRecord::Calbacksを参照してください。

于 2013-08-13T22:32:14.610 に答える