跳轉到內容

Ruby on Rails/ActiveRecord/計算

來自華夏公益教科書

計算提供用於計算 ActiveRecord 模型中列的聚合值的方法。

所有計算都透過 calculate 方法處理。calculate 方法接受操作名稱、列名和任何選項。選項可用於使用 :conditions、:order、:group、:having 和 :joins 自定義查詢。

支援的計算是

  • 平均值
  • 總和
  • 最小值
  • 最大值
  • 計數

calculate 方法有兩種工作模式。如果 :group 選項設定,則結果將作為單個數值返回(計數為 fixnum,平均值為 float,其他所有值則為列型別)。如果設定了 :group 選項,則結果將作為值的有序 Hash 返回,並按 :group 列對它們進行分組。:group 選項接受列名或belongs_to關聯。

注意,如果計算中指定的條件導致基礎表中沒有返回任何值,則 calculate 方法將返回nil.

例如

 values = Person.maximum(:age, :group => 'last_name')
 puts values["Drake"]
 => 43
 drake  = Family.find_by_last_name('Drake')
 values = Person.maximum(:age, :group => :family) # Person belongs_to :family
 puts values[drake]
 => 43
 values.each do |family, max_age|
    ...
 end

平均值

[編輯 | 編輯原始碼]

您可以使用 average 方法計算特定列的平均值。例如

 Person.average(:age)

將返回 Person 模型中所有人的平均年齡。

自定義查詢的示例

 Person.average(:age, :conditions => ['age >= ?', 55])

這將返回 55 歲或以上的人的平均年齡。

sum 方法將計算特定列的總和。例如

 Product.sum(:number_in_stock)

將返回庫存中產品的總和。

自定義查詢的示例

 Product.sum(:number_in_stock, :conditions => ['category_id = ?', 10])

將返回類別 10 且庫存中的產品的數量之和。

最小值

[編輯 | 編輯原始碼]

minimum 方法將計算特定列的最小值。例如

 Donation.minimum(:amount)

將返回捐贈的最低金額。

自定義查詢的示例

 Donation.minimum(:amount, :conditions => ['created_at > ?', 1.year.ago])

這將返回過去一年中捐贈的最低金額。

最大值

[編輯 | 編輯原始碼]

maximum 方法將計算特定列的最大值。例如

 Donation.maximum(:amount)

將返回捐贈的最高金額。

自定義查詢的示例

 Donation.maximum(:amount, :conditions => ['created_at > ?', 1.year.ago])

這將返回過去一年中捐贈的最高金額。

計算滿足條件的專案的數量。

 TestResult.count(:all)

將返回資料庫中 TestResult 物件的數量。

自定義查詢的示例

 TestResult.count(:all,:conditions=>['starttime>=?',Time.now-3600*24])

將返回其 starttime 欄位在過去 24 小時內的 TestResult 物件的數量。

華夏公益教科書