首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Ruby on Rails 開發從頭來(三十九):ActiveRecord 基礎——屬性存取方式

     編輯:Java 相關知識

三種屬性存取方法比較

ActiveRecord 物件的屬性對應資料表欄位,提供多種存取方式,理解其差異有助於撰寫更符合慣例的程式碼。

1. 索引運算子(不推薦)

account[:balance]      # 讀取
account[:balance] = 0.0 # 寫入

雖然可行,但非 Ruby 慣用寫法,降低可讀性。

2. 存取器方法(推薦)

account.balance        # 讀取
account.balance = 0.0   # 寫入

符合 Ruby 物件導向風格,程式碼清晰自然,是慣用做法。

3. 取得原始資料庫值(_before_type_cast)

ActiveRecord 會自動將資料庫型別轉換為 Ruby 物件(如 timestamp → Time)。若需取得資料庫原始字串值,在存取器後加 _before_type_cast:

account.balance_before_type_cast      # => "123.4" (String)
account.release_date_before_type_cast # => "20050301" (String)

常用於表單顯示使用者原始輸入或匯出原始資料。

4. 底層私有方法

account.read_attribute(:balance)   # 等同 account[:balance]
account.write_attribute(:balance, 0.0) # 等同 account[:balance] = 0.0

內部實作使用,極少在應用層直接呼叫。

型別轉換對照表

SQL 型別Ruby 類別
int, integerFixnum
float, doubleFloat
decimal, numericFloat (注意精度問題)
char, varchar, stringString
clob, blob, textString
datetime, timeTime
dateDate
booleanTrueClass/FalseClass

Decimal 精度陷阱

資料庫 decimal 對應 Ruby Float,浮點數運算存在捨入誤差。貨幣計算建議:

  • 以整數存儲最小單位(如分),顯示時除以 100。
  • 或使用 composed_of 聚合多個欄位構建 Money 物件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved