与sqlite的布尔的布尔值
问题描述:
我有点仍然与铁轨noob,但我碰到的东西似乎有点奇怪。我在数据库中增加了一个布尔字段到模型正是如此与sqlite的布尔的布尔值
t.column :admin, :bool, :default => false, :null => false
然而,在sqlite3的数据库中值似乎是要么't'
或'f'
。这很好,但如果值为'f'
,我仍然希望user.admin?
返回false。正如你可以从下面的控制台会话看到,情况并非如此:
>> user = User.first
=> #<User id: 2, login: "matt", name: "", email: "[email protected]", crypt
ed_password: "c6740f820b4cbf6e3d88188719f23cd3053a54f0", salt: "5629f5ee09f51543
a7d64dd903b8d9e53aa43a24", created_at: "2009-04-26 23:08:05", updated_at: "2009-
04-26 23:10:38", remember_token: nil, remember_token_expires_at: nil, admin: "t"
>
>> user.admin?
=> true
>> user.admin = false
=> false
>> user.save
=> true
>> user = User.first
=> #<User id: 2, login: "matt", name: "", email: "[email protected]", crypt
ed_password: "c6740f820b4cbf6e3d88188719f23cd3053a54f0", salt: "5629f5ee09f51543
a7d64dd903b8d9e53aa43a24", created_at: "2009-04-26 23:08:05", updated_at: "2009-
05-06 03:32:23", remember_token: nil, remember_token_expires_at: nil, admin: "f"
>
>> user.admin?
=> true
这只是使用SQLite一些奇怪的问题,还是我只是没有得到的东西吗?
答
+0
是的,我觉得这是奇怪的。谢谢:) +1并标记为已回答 – 2009-05-06 14:27:24
答
该问题可能与数据库迁移有关。我不认为:bool是使用正确的数据类型名称。尝试:布尔代替,例如
t.column :admin, :boolean, :default => false, :null => false
我不知道确切的答案,但我认为它可能与Ruby/Rails有关,而不是SQLite本身。 SQLite实际上并不具有布尔型数据类型(请参阅http://www.sqlite.org/datatype3.html),因此包装者有责任以某种方式对其进行编码。通常,会使用1或0,但Rails可能会做一些奇怪的事情。另外,请记住,SQLite是弱类型的,因此您可以将int整理到varchar列等中,这可能会导致痛苦(有关相关讨论,请参阅http://chriscraig.net/blog/sqlite-boolean-true-or-false/) )如果你不小心。 – 2009-05-06 03:55:22