Rails如何循环计算并创建“假”列?

时间:2011-12-21 18:05:08

标签: ruby-on-rails ruby ruby-on-rails-3

我想循环一个基于用户参数的计算。

我的索引操作示例:

@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 %>

1 个答案:

答案 0 :(得分: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!