Soy un poco novato con rieles, pero estoy corriendo por algo que parece un poco extraño. He añadido un campo booleano a un modelo en la base de datos thuslybooleanos en rieles con sqlite
t.column :admin, :bool, :default => false, :null => false
Sin embargo, el valor en la base de datos sqlite3 parece ser ya sea 't'
o 'f'
. Eso está bien, pero aún esperaría que user.admin?
devuelva falso si el valor es 'f'
. Como se puede ver en la siguiente sesión de la consola, que no es el caso:
>> 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
Se trata sólo de una cierta edición extraña con SQLite, o estoy simplemente no conseguir algo?
No sé la respuesta exacta, pero creo que probablemente tiene que ver con Ruby/Rails, no SQLite per se. SQLite en realidad no tiene un tipo de datos booleano (consulte http://www.sqlite.org/datatype3.html), por lo que es responsabilidad del responsable del contenido codificarlo de alguna manera. Normalmente, se usaría 1 o 0, pero Rails podría estar haciendo algo extraño. Además, recuerde que SQLite está débilmente tipado, por lo que puede colocar entradas en sus columnas varchar, etc. y esto puede causar dolor (consulte http://chriscraig.net/blog/sqlite-boolean-true-or-false/ para una discusión relevante).) si no tienes cuidado. –