程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Ruby on rails開發從頭來(四十)- ActiveRecord基礎(Boolean屬性)

Ruby on rails開發從頭來(四十)- ActiveRecord基礎(Boolean屬性)

編輯:關於JAVA

一些數據庫支持boolean類型,而另一些則不支持,這使得Active Record要抽象boolean類型變得困難。例如,如果數據庫不支持boolean類型,有的開發者使用char(1)來替代,而內容使用“t”和“f”來表示true和false,而另外一些開發者使用integer類型,0是false,1是true。即使數據庫支持boolean類型,在內部也許還是使用0和1來存儲。

在Ruby裡,在條件判斷中,數字0和字符f都被認為是true值,這就意味著如果你直接使用屬性的值,你的代碼會被認為該列的值是true,而不是你認為的false,例如:

# 不要這樣使用

user = Users.find_by_name("Dave")
if user.superuser
grant_privileges
end

當在查詢條件中使用屬性時,你必須在列名後添加一個問號:

# 這樣是正確的

user = Users.find_by_name("Dave")
if user.superuser?
grant_privileges
end

當使用訪問操作符來獲取屬性的值時,當值為數字0,或者字符“0”,“f”,“false”,或“”(空字符串),或nil,或一個常量false時,都被認為是false,否則,就會被認為是true。

如果你在一個遺留系統上或者非英語系統上開發,上面對true的定義也許會無法工作,在這種情況下,你可以override內建的謂詞方法的定義,例如,荷蘭語情況下,字段也許包含J或者N,這種情況下,你可以像下面這樣:

class User < ActiveRecord::Base
def superuser?
self.superuser == 'J'
end
# . . .
end
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved