2012-08-24 48 views
0

我有一個安裝程序,其中有10個接受浮動軌道形式的屬性。每個屬性也與我的模型中的值相關聯。如果在表單中輸入多個屬性的數字,我需要創建一個加權平均值。使用Ruby on Rails從布爾值計算平均值

一個例子是如果我有10個產品,每個產品在我的模型中都有價格。在表格中,用戶可以輸入每種產品的數量(產品數量)。我想爲已輸入金額的產品計算加權價格。

那麼如何創建一個加權平均值來檢查哪些產品有輸入金額?

+0

你如何識別所有字段選擇? 你發送所有的參數或只選擇一個的 – PriteshJ

+0

我現在發送所有參數,不知道如何只發送選定的 – sacshu

+0

您使用的是CGI,還是這個代碼運行在Rails或Sinatra或類似的東西?他們可以通過返回數組值來提供幫助,使得循環你想要的數據變得微不足道。你如何設置你的表單可以在這裏幫助。 –

回答

1
columns_names = ['a','b','c','d'] # array of name of the columns 

obj = Model.find(:id) # find the object with id 

# loop and get column values that are set 

values = columns_names.inject([]) do |arr,column_name| 
    arr << obj.column_name if params[column_name].eql?"true" # collect the values if the column set 
    arr 
end 

#get average 
if values.blank? 
    # no column selected 
else 
    avg = values.reduce(:+)/values.size 
end 

檢查此求助加權平均

http://www.dzone.com/snippets/weighted-mean

+0

對不起,我認爲這可行,但我已經意識到我現在需要一個加權平均值。我已經更新了上面的原始問題 - 是否有一種方法來調整此代碼的加權平均值? – sacshu

+0

只是用'function'替換'values.reduce(:+)/ values.size'來計算加權平均值 – PriteshJ

+0

@ user1486809,在加權平均值上添加了一個幫助鏈接 – PriteshJ

1

此代碼檢索您的手機型號是真正的所有屬性:

@model = Model.find(params[:id) 
@model.attributes.select{|k,v| (v.is_a?(TrueClass) || v.is_a?(FalseClass)) && v} 

如果你想在真假難辨只是做一個:

@model.attributes.select{|k,v| (v.is_a?(TrueClass) || v.is_a?(FalseClass)) && !v} 

不知道這是否是你是什麼尋找,但也許它可以清除你的頭一點點。

+0

謝謝,雖然我不知道如何應用它。我想它會告訴我哪個布爾值(如果多於一個)被選中,但不確定如果此代碼返回所有屬性,我如何指定布爾部分。 – sacshu