2011-12-21 69 views
0

我想循環一個基於用戶參數的計算。Rails如何循環計算並創建一個「假」列?

例如在我的索引行動,我有:

@com = Company.where(:online => true).order('position') 

我我的表,我有:

Name (varchar) 
Price1 (integer) 
Price2 (integer) 
Price1in (integer) 
Price2in (integer) 

鑑於我再有我的簡單循環:

<%= com.name %><br /> 
<%= com.price1 %><br /> 
<%= com.price2 %> 

我已創建一個實例方法來做一些計算。 型號:

def sum_price(x) 
    (((x - self.price1in) * (60 * self.price1))/100)) 
    end 

    def sum_price2(x) 
    (self.price2 * x/100) 
    end 

我現在可以做的:

<% @com.each do |com| %> 

    <%= com.name %><br /> 
    <%= com.price1 %><br /> 
    <%= com.price2 %><br /> 
    <%= com.sum_price(params[:price]) %><br /> 
    <%= com.sum_price2(params[:price2]) %> 
<% end %> 

但我想TOTAL_PRICE這是com.sum_price2(params[:price]) + com.sum_price2(params[:price2])訂購,我希望能夠將其調用視圖:

<% @com.each do |com| %> 
    <%= com.name %><br /> 
    <%= com.total_price %><br /> 
<% end %> 
+0

total_price從哪裏來?編輯:剛看到它的sum_price2 + sum_price1。 – 2011-12-21 18:10:39

回答

3

這應該工作:

class Company 
    include Comparable 
    attr_accessor :total_price 

    def <=> other 
    self.total_price <=> other.total_price 
    end 

    def sum_price(x) 
    (((x - self.price1in) * (60 * self.price1))/100)) 
    end 

    def sum_price2(x) 
    (self.price2 * x/100) 
    end 

    def calculate_total price1, price2 
    @total_price ||= sum_price(price1) + sum_price2(price2) 
    end 
end 

#controller 
@companies = Company.all 
@companies.each{|company| company.calculate_total(params[:price], params[:price2])} 
@companies.sort! 
+0

它的作品def <=>其他的作品是什麼? – 2011-12-21 18:34:47

+0

爲了工作。這樣,我可以告訴「每當這種情況發生排序時,按照它們的總價格排序。」 – 2011-12-21 18:56:53

+0

我創建了一個類似的問題更復雜,因爲公司可以有很多包。問題是爲用戶找到最便宜的價格。當總價格可能更便宜,包括一個或多個包裹或必要時。 http://stackoverflow.com/questions/8632392/rails-how-to-do-really-complex-loop-based-calculations – 2011-12-26 14:35:38