2017-08-15 46 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

謝謝,我認爲它會工作。 –

相關問題