2011-12-21 35 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