Сохранение данных из представления в базу данных - PullRequest
1 голос
/ 25 октября 2011
<% for product in @order.line_items -%>
<% total_price += (product.price * product.quantity) -%>
<tr>
    <td><strong><%= product.item.description%></strong></td>
    <td><%= product.item.category.category_name%></td>
    <td><%= product.quantity%></td>
    <td><%= product.price%></td>

</tr>
<% end -%>

Как сохранить total_price в моей базе данных? Спасибо!

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

В вашем примере вы работаете в представлении. Представление не предназначено для манипулирования данными и их отображения для отображения данных. Если вы хотите добавить метод, который предоставляет вам общую цену, вы можете добавить его к своей модели:

def total_price
     self.price*self.quantity
end

Тогда вы можете назвать это следующим образом:

<%= product.total_price %>

Принцип заключается в том, что вы никогда не сохраняете в базе данных данные, которые можно рассчитать из других полей, которые уже есть в базе данных.

Также не следует использовать цикл for. Используйте итерацию так:

<% @order.line_items.each do |product| %>
      <%= stuff you do......  %>
<% end %>

Когда вы хотите сумму, которую вы можете сделать:

@order.line_items.collect(&:total_price).sum
1 голос
/ 25 октября 2011

Вы должны добавить метод к вашей модели Order, который вычисляет общую стоимость заказа:

def total_price
  line_items.sum('price * quantity')
end

С этим вы можете сделать:

@order.total_price

Дополнительным преимуществом этого метода является то, что вычисления выполняются в базе данных. Нет необходимости повторять все позиции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...