2013-04-01 42 views
1

每當我從數據庫中獲取的紀錄,我得到「F」或「t」我已經添加了一個布爾列到我的活動記錄遷移ActiveRecord的布爾值返回「F」,「T」

class AddIncludeInConsolidationToCompanies < ActiveRecord::Migration 
    def change 
    add_column :companies, :include_in_consolidation, :bool, :default => true 
    end 
end 

而不是真或假。

是否activerecord不應該自動處理到和從數據庫的類型轉換。

這就像ActiveRecord::Base.connection.quoted_true/false默認爲true。

這是最好的方法是什麼?理想情況下,它應該工作,一個布爾列應該默認返回一個布爾值而不是一個字符串。

回答

2

「T」和' f'是PostgreSQL用於布爾值的東西。

'布爾'不是Rails遷移的有效數據類型。你需要使用'布爾'。我的猜測是'bool'正在獲取在數據庫中創建的列,但是當數據加載到模型中時Rails會感到困惑。更改並重新運行遷移,我敢打賭一切都可以實現。

+0

在事後看來,這總是非常明顯。 – Martinffx

0

可能是我錯了,但布爾值在PostgreSQL中保存爲'f'或't'。

但是,您可以在您的RoR邏輯中使用傳統的真/假。由於與名爲「主動」的布爾屬性的用戶模型,你可以做

if !user.active? 
    # do something 
else 
    # do something else 
end 

正如你可以看到真/假測試工作正常...

乾杯