логические значения в рельсах с sqlite - PullRequest
9 голосов
/ 06 мая 2009

Я немного новичок, все еще с рельсами, но я сталкиваюсь с чем-то, что кажется немного странным. Я добавил логическое поле для модели в базе данных, таким образом

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 или я просто ничего не понимаю?

Ответы [ 2 ]

13 голосов
/ 06 мая 2009

Используйте это вместо:

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

Читайте, почему здесь .

1 голос
/ 06 мая 2009

Возможно, проблема связана с миграцией базы данных. Я не думаю, что: bool - правильное имя типа данных для использования. Попробуйте вместо этого: boolean, например

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