2012-11-17 73 views
2

我有一個模型將用戶設置存儲爲0或1(對於true/false)。在我的代碼,我不得不這樣做:Rails將整數評估爲布爾型

if @user.settings.show_menu == 1 
    # do this 
end 

我怎麼能離開了== 1== 0?我已經試過:

if @user.settings.show_menu 
    # do this 
end 

但它不評估爲真,同樣使用[email protected]_menu

這是一個漫長的一天時,請指導我在正確的方向。謝謝!

+2

在Ruby中,只有'nil'和'false'被認爲是虛假的。所以正確的測試確實是檢查'== 0'或'== 1'。 –

+3

如果你的遷移被定義爲期望這是一個布爾值而不是int值,那麼Rails應該自己處理這個。 –

+0

還有問題,我沒有將該列設置爲布爾型XD。現在改變,感謝提示 –

回答

4

在Rails中有一個boolean列用於存儲爲數字的數據庫並進行相應的轉換。通常這在數據庫中編碼爲SMALLINT。如果您經常使用INT,則可以隨時遷移並轉換它們。

一個例子遷移:

change_table :table_name do |t| 
    t.change(:boolean_column, :boolean) 
end 

在您的應用程序,標準的做法是指布爾標誌與他們?法版本,如:

if (@user.settings.show_menu?) 
    # ... 
end 

如果沒有定義這個方法,你會得到一個例外,這會導致你發現問題。這有利於比它總是評估爲真。