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

來源:互聯網
上載者:User

一些資料庫支援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.superusergrant_privilegesend

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

# 這樣是正確的

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

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

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

class User < ActiveRecord::Basedef superuser?self.superuser == 'J'end# . . .end

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.