2013-07-09 15 views
0

我有一个has_many菜单和has_many sub_menus菜单的餐厅。我试图在rails视图中获得每个菜单或sub_menu的总订单。我已经有了通过if,else语句拆分两个(菜单和sub_menu)的逻辑。但是我无法为每个菜单或sub_menu获得所有订单的总和。我已经试过这如何在rails视图中使用map方法

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

,这将引发一个符号 '+' 的错误,而这得到计数,但总量不

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

UPDATE


一间餐厅的has_many菜单(模式菜单),而菜单has_many sub_menus(Model sub_menu)。菜单和sub_menu都有很多订单(型号Order)。所以我试图得到菜单或sub_menu的订单数。希望它很清楚。

+0

什么是“秩序”?菜单和子菜单中的字段? –

+0

自己的模型。 – capdiz

+0

你的第二条陈述显示订单计数是不正确的,因为订单关系只会在菜单上工作,而不是菜单,因为后者是一个数组。请更简要地定义问题中的关系 –

回答

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 
0

方法map迭代给定菜单的所有顺序,每次产生一个顺序对象。该对象存储在sum中,因为它是您提供的块本地列表中的第一个变量|sum, order|。由于没有更多的产生,所以order变量对于每次迭代都是零。 现在您可以很好地想象,在您的订单模型类中没有定义+方法。因此它抛出一个undefined method +'作为例外。

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

下可能会有所帮助:

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

我以为有你order模型price场。希望这可以帮助。顺便说一句,你在代码中缺少}。你看见了吗?

+0

以上的问题进行了更新,请让我尝试将其添加到我的班级模型中。 – capdiz

+0

如果您尚未事先添加,订单的实际价格数量在哪里存储? –

+0

它被作为total_amount存储在订单模型中,而价格在菜单模型中 – capdiz

相关问题