用sqlite在rails中的布尔值

时间:2009-05-06 03:42:31

标签: ruby-on-rails ruby sqlite model boolean

我仍然是一个仍然使用rails的菜鸟,但我正在遇到一些似乎有些奇怪的事情。我在数据库中为模型添加了一个布尔字段

t.column :admin, :bool, :default => false, :null => false

但是,sqlite3数据库中的值似乎是't''f'。这很好,但如果值为user.admin?,我仍然希望'f'返回false。正如您在以下控制台会话中看到的那样,情况并非如此:

>> user = User.first
=> #<User id: 2, login: "matt", name: "", email: "google.ninja@no-spam.com", 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: "google.ninja@no-spam.com", 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的一些奇怪问题,还是我没有得到什么?

2 个答案:

答案 0 :(得分:13)

请改用:

t.column :admin, :boolean, :default => false, :null => false

了解原因here

答案 1 :(得分:1)

问题可能出在数据库迁移上。我不认为:bool是正确的数据类型名称。尝试:布尔代替,例如

t.column :admin, :boolean, :default => false, :null => false