9

私はまだレールを持っている少し初心者ですが、少し奇妙に思える何かに出くわしています。したがって、データベースのモデルにブールフィールドを追加しました。

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

ただし、sqlite3データベースの値はまたはのいずれ't'かであるよう'f'です。user.admin?それは問題ありませんが、値が。の場合はfalseを返すことを期待します'f'。次のコンソールセッションからわかるように、そうではありません。

>> 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の奇妙な問題ですか、それとも何かが得られないだけですか?

4

2 に答える 2

13

代わりにこれを使用してください:

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

ここで理由を読んでください。

于 2009-05-06T03:57:34.587 に答える
1

問題はデータベースの移行にある可能性があります。:boolが使用するのに適切なデータ型名だとは思いません。代わりに:booleanを試してください。例:

t.column :admin, :boolean, :default => false, :null => false
于 2009-05-06T03:57:21.340 に答える