2017-08-15 42 views
-1

我正尝试创建一个拥有用户,订单和用餐的餐馆经理应用程序。用户有很多订单,订单有很多餐。我想要一个表格,列出用户的所有订单以及用餐的名称和价格。我有三种型号:User,OrderMeal。虽然它不是从这个循环访问order_id一个问题:从Rails中的.each循环访问另一个模型

- @userOrders.each do |order| 
    %tr 
     %td= order.id 

,当我试图通过

- @userOrders.each do |order| 
    %tr 
     %td= order.id 
     %td= order.meals.name 

这里访问顿饭的名字就是我得到:

Table with what's supposes to be meals' names

在Ruby控制台,当我输入user.orders[1].meals时,我得到:

Console output

这是我orders_controller.rb

def index 
    user_id = current_user.id 
    @userOrders = Order.where(:user_id => user_id)  
    end 

下面是我的order.rb

class Order < ApplicationRecord 
    belongs_to :user 
    has_many :meals 
end 

user.rb

class User < ApplicationRecord 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
    has_many :orders 
end 

meal.rb

class Meal < ApplicationRecord 
    belongs_to :order 
end 
+1

您的预期输出是什么? – Stefan

+0

我的预期输出是在一个​​元素中列出与特定order_id相关的所有用餐。 –

回答

4

订单有很多餐。许多饭菜都不能只有一个名字。这就是你想用order.meals.name来做的事情。每餐都有自己的名字。重复进餐。类似这样的:

- orders.each do |order| 
    - order.meals.each do |meal| 
    = meal.name 
+2

此外,您应该在提取'orders'时包含'meals'以避免_N + 1 queries_,请参阅[热切加载关联](http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations ) – Stefan

+0

谢谢,我认为它会工作。 –

相关问题