当在Firefox SQLite管理器中将col创建为BOOL时,在rails 3.1.4中的sqlite3中未正确保存Boolean

时间:2012-07-13 18:08:16

标签: ruby-on-rails sqlite

我们的rails 3.1.4 app中的表记录中有一个canceled列。最初,canceled在Firefox SQLite管理器中创建为BOOL,这是软件提供的默认类型。在导轨中使用canceled = false时,false已保存到col canceled的记录表中​​。问题是当使用Record.where("canceled = ?", false)进行查询时,未选择canceledfalse的记录,因为false在sqlite3中未被解释为FALSE。为了选择所有canceled = false,我们必须Record.where("canceled =? OR canceled =?", false, 'false')

我们在SQLite管理器中手动将canceled的数据类型从BOOL更改为'boolean'后,Record.where("canceled =? ", false)可以使用canceled作为f获取新创建的记录}。在SQLite管理器中,那些canceled值表示为f,由rails解释为FALSE。

如何修复表记录(canceled为'false')以便Record.where("canceled =? ", false)可以正常工作?非常感谢。

更新:在rails控制台中查询表记录时,canceled不表现为布尔值(true或false)。 falsecanceled无法接收列Record.where("canceled =?", true)Record.where("canceled =?", false)的所有记录。但是在canceled中返回的.class在rails控制台中仍然是FalseClass。奇怪,不是吗?

1 个答案:

答案 0 :(得分:2)

UPDATE my_table
   SET canceled = true -- or 1 check the table
 WHERE canceled = 'true'


UPDATE my_table
   SET canceled = false
 WHERE canceled = 'false'

修改

试试这个

my_model.update_all( {:canceled => true}, {:canceled => 'true'} )
my_model.update_all( {:canceled => false}, {:canceled => 'false'} )