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