无法理解如何在RoR中对物品价格求和

时间:2010-12-12 20:06:16

标签: ruby-on-rails

您好我想制作简单的购物车。 我是编程的初学者。所以请帮忙。 我有价格的项目,我想总结它们(数量等于一)。

veiw

<h1>Summ:<%= @items.total %></h1>

模型

class Item < ActiveRecord::Base

  def total
      summ = 0
      @items.each do |item|
          summ += item.price
      end
  end

end

出了什么问题。我在Item#index

中有错误NoMethodError

4 个答案:

答案 0 :(得分:9)

Rails定义了一个可以调用的Enumerable::sum方法。所以你的观点看起来像这样:

<h1>Summ: <%= @items.sum(&:price) %></h1>

您还可以向total(或您正在使用的任何型号has_many:items)添加Order方法。有点像:

class Order < ActiveRecord::Base
  has_many :items

  def total
    items.sum(&:price)
  end
end

然后你的观点:

<h1><%= @order.total %></h1>

答案 1 :(得分:1)

您引用的实例变量@items在控制器中设置,但在模型中,这是您定义total的位置。如果您有一个包含项目集合的模型。另外两个答案解决了此代码中的其他错误。

答案 2 :(得分:0)

1)您的视图显然正在寻找name方法,但您已定义total方法。(编辑问题以解决此问题。)

2)您在summ方法中计算了total,但显然没有return方法。

3)您正在定义Item类的方法,即您可以调用单个项目的方法;但是,你想把几个项目的价格加在一起。

答案 3 :(得分:0)

查看Enumerable方法inject方法。您应该在控制器中计算此值并将其传递给视图

控制器

@summ = @items.inject(0) {|sum, item| sum + item.price }

查看

<h1>Summ:<%= @summ %></h1>