0

我有一个 .numbers 电子表格,其中包含我导出为 csv 的原始数据,并使用自定义构建的导入工具将该数据导入我的 Rails 应用程序。我在 Numbers 中有一些列,我只是在其中输入一个1or0来表示一个布尔字段。

我以下验证了我的一个模型上的行:

  validates :powered,
    inclusion: [true, false]

由于导入的值是1并且我正在检查该值是否验证,true否则false这显然不是验证和失败。

如何在不更改原始电子表格或导出的 csv 的情况下将1's 和0's 从 csv 映射到标准布尔值truefalse在我的 Postgres DB 和 Rails 应用程序中?

4

2 回答 2

2

I would use a callback to translate the 1 or 0 to true or false. Something like the following:

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

The validation happens before the Model is saved to the DB, therefore the conversion (usually DB specific - MySQL will store booleans differently to Postgres) never occurs.

You may need to massage your values, when extracting from CSV and before validating, using a before_validation callback. Check out ActiveRecord::Calbacks for more info.

于 2013-08-13T22:32:14.610 回答