将视图中的数据保存到数据库中

时间:2011-10-25 07:45:45

标签: ruby-on-rails

<% 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 个答案:

答案 0 :(得分:2)

在您的示例中,您正在视图中工作。视图不是为了操纵Data来显示数据。如果要添加一个为您提供总价的方法,可以将其添加到模型中:

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 :(得分:1)

您应该在Order模型中添加一个计算订单总价的方法:

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

你可以这样做:

@order.total_price

此方法的另一个优点是计算在数据库中完成。无需迭代所有订单项。