2013-04-05 4 views
1

У меня есть таблица mysql, определенная со статусом (который является tinyint (1)). Однако, когда я пытаюсь проверить, является ли значение истинным или ложным, я, кажется, пришел к ошибочному результату. То есть, он не видит значение как законная истина или ценности, а тест, если он не «ноль» или так - значит, мой «кажется, не работает»Ruby TinyInt (1)?

results.each_hash do |row| 
# What I tried 

# (a) 
if row['status'] 
    # do something - doesn't seem to work 
end 

# (b) 
if row['status'].to_i == 1 
    # this seems correct 
end 

# (c) 
if row['status'] == false 
    # doesn't seem to work 
end 
end 

Что такое ПРАВИЛЬНАЯ подход для проверки этого значения (tinyint (1)), поскольку он должен быть TrueClass или FalseClass в Ruby; однако (c) не работает сам.

Это ссылка, которую я использовал - Я предполагаю, что это должно распространяться на рельсах и в самом рубина (если ActiveRecord не выполняет работу) - http://www.orthogonalthought.com/blog/index.php/2007/06/mysql-and-ruby-on-rails-datatypes/

+0

TinyINT get интерпретируется на большинстве языков C# и т. Д., Чтобы быть «логическим», извините, и Ruby (он должен видеть его как TRUECLASS или FALSECLASS) –

ответ

2

С active_record-3.2.13, abstract_mysql_adapter.rb код строки 96:

# By default, the MysqlAdapter will consider all columns of type <tt>tinyint(1)</tt> 
    # as boolean. If you wish to disable this emulation (which was the default 
    # behavior in versions 0.13.1 and earlier) you can add the following line 
    # to your application.rb file: 
    # 
    # ActiveRecord::ConnectionAdapters::Mysql[2]Adapter.emulate_booleans = false 
+0

Спасибо - так что Active Record считают, что Bool и Ruby (standalone) считают его простым int , Спасибо –

+0

Ruby сам не говорит базы данных. Если вы используете ActiveRecord, те же преобразования данных должны применяться независимо от того, находитесь ли вы в Rails или просто используете камень ActiveRecord в проекте, отличном от Rails. Если вы используете ActiveRecord вне Rails, возможно, вам не хватает какой-либо конфигурации, которую предоставляет Rails. Если вы вообще не используете ActiveRecord (например, gem mysql2), вам придется обратиться к этой документации. –