Rails, как зациклить расчет и создать «поддельный» столбец? - PullRequest
0 голосов
/ 21 декабря 2011

Я хочу выполнить цикл, основанный на параметрах пользователей.

Пример в моем действии индекса:

@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 Ответ

3 голосов
/ 21 декабря 2011

Это должно работать:

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!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...