0

我有一家餐厅有_many 菜单和一个菜单有_many sub_menus。我正在尝试获取 rails 视图中每个菜单或 sub_menu 的总订单数。我已经有了通过 if、else 语句拆分两个(菜单和子菜单)的逻辑。但是我遇到了每个菜单或子菜单的所有订单总和的麻烦。我试过这个

<% restaurant.menus.each do |menu| %>
    <%= menu.orders.map{|sum, order|sum+order %>
<% end %>

这会引发符号“+”错误,而这会被计数但不是总数

<%= restaurant.menus.orders.count %>

更新


餐厅有_many 菜单(模型菜单),而菜单有_many 子菜单(模型子菜单)。menu 和 sub_menu 都有很多订单(model Order)。所以我试图计算菜单或 sub_menu 的订单数。希望它很清楚。

4

2 回答 2

0

该方法map遍历给定菜单的所有订单,每次都产生一个订单对象。该对象被存储在其中,sum因为它是您提供的块本地列表中的第一个变量|sum, order|。由于没有更多的产生,order因此每次迭代的变量都将为 nil。现在您可以想象,+在您的订单模型类上没有定义任何方法。因此它undefined method为`异常抛出一个+'。

如果这看起来很奇怪,那么请永远记住,写作a+b只是写作的一种缩写形式,a.+(b)其中+的一种方法是a.

以下内容可能会有所帮助:

sum=0;
menu.orders.map{|order| sum+=order.price}

我假设您的模型price中有一个字段。order希望这可以帮助。顺便说一句,您的代码中缺少一个}。你看见了吗?

于 2013-07-09T05:36:22.880 回答
0

您可以进行以下更改以获取餐厅的菜单订单和子菜单订单的数量

Restaurant 
  has_many :menus
  has_many :sub_menus #u can add this if it doesnt exist
  has_many :menu_orders, :through => :menus, :class_name => "Order" #this will give u an array of orders for all the menus of the restaurant
  has_many :sub_menu_orders, :through => :sub_menus, :class_name => "Order" #this will give array of orders for all the submenus of the restaurant

Menu
  belongs_to :restaurant
  has_many :sub_menus
  has_many :orders

SubMenu
  belongs_to :restaurant #u can add this if it doesnt exist
  belongs_to :menu
  has_many :orders

Order
  belongs_to :menu
  belongs_to :sub_menu
于 2013-07-09T05:37:34.647 回答