簡體   English   中英

。在ActiveRecord中找到方法

[英].finding on a method in ActiveRecord

我正在使用ActiveRecord和Ruby(在Rails之外)跟蹤一些統計信息。

我向一個模型中添加了一個方法( total_cost ),以使用當前模型中的幾個列以及另一個模型中的列進行計算。

我真的很希望能夠使用ActiveRecord的一些規定(使用我定義的方法進行數學計算(求和,求和)和簡單的發現),但是任何嘗試都會使我(一個完全可以理解的)“未知列”錯誤,例如

Article.find(:all, :conditions => ["total_cost > ?", 300])

結果,我正在以一種可以描述為蠻力的方式做事,只是找到所有文章,然后將每個人的total_value填充到一個數組中,然后對其求和和求平均值。

除了我在做什么以外,我還有其他選擇嗎? 我是否應該將ActiveRecord移到MySQL本身來計算有問題的值?

你可以做

Article.sum(:total_cost, :conditions => ["total_cost > ?", 300])
Article.average(:total_cost, :conditions => ["total_cost > ?", 300])

給定total_cost是一種方法:

total_cost = 'freelance_cost + effort * editor.hourly_rate'
Artice.sum(total_cost, :conditions => ["#{total_cost} > ?", 300], :joins => [:editor])

一種選擇是將計算總成本的方式轉換為SQL表達式,以便您可以將該表達式替換為查詢中可能需要的“ total_cost”的任何引用。 如果總成本計算復雜或依賴於多個表,那么這可能非常麻煩。

如果可行,在Article模型上具有total_cost屬性似乎確實有意義。 當有人調用方法a.total_costa.total_cost計算就可以在模型更改時使用回調進行計算並保存。 例如:

def before_save
  self.total_cost = ... whatever ...
end

這樣一來,您就可以使用總和來計算總成本。 這比獲得文章,計算每個文章的總成本然后匯總它們要有效得多。 它可能比每次請求都更有效。

該解決方案取決於總成本值的變化不大。 如果它總是根據各種不同對象的變化而變化,那么檢測總成本何時必須變化將更加尷尬,而以這種方式計算總成本則效率較低。 當然,這肯定會使您的計算更容易。

find方法創建SQL。 您不能在其中使用total_cost方法。 因此,需要用SQL編寫total_cost的計算。 如果要使用該方法,則可以從所有過濾必要的數據。

@articles = Article.find :all
@articles = @articles.select {|a| a.total_cost > 300}

但是這種方式花費更多的資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM