2012-06-18 78 views
1

紅寶石這可能是一個很簡單的問題,我向你道歉 - 我是新來的軌道。的has_many/belongs_to的訪問控制信息 - on Rails的

我有2個控制器 - 客戶和訂單。我已經知道了,當客戶下訂單時,他們的ID將被傳遞到隱藏字段中,以便訂單表中的customer_id字段具有其ID。所以所有訂單都有放置它的客戶的ID。我想要做的是讓客戶的展示視圖顯示他們的所有訂單 - 所有訂單都帶有他們的ID。

我已經得到了客戶的has_many訂單和訂單belong_to客戶等我如何引用客戶/訂單提取合適的信息?我是否需要在控制器的show動作中加入額外的信息?我嘗試了一切我能想到的!到目前爲止,我已經能夠獲得所有信息的散列以顯示在節目視圖中,但是我無法獲得單獨的信息位 - 例如, order.price。

我基本上要在客戶訂單詳細信息表顯示視圖 - 訂單價格,日期等放置任何幫助,將不勝感激,謝謝!

編輯:我現在有這一點 - 但不能得到line_items位工作。關係如下所示:客戶有很多訂單,訂單有很多訂單項,訂單項屬於產品。我懷疑它不工作的原因是因爲belongs_to。

<% @customer.orders.each do |order| %> 
    <% order.line_items.each do |line_item| %> 
     <tr> 
      <td><%= line_item.created_at %></td> 
       <% line_item.products.each do |product| %> 
        <td> <%= product.name %></td> 
       <% end %> 
      <td><%= order.email %></td> 
     </tr> 
    <% end %> 
<% end %> 

回答

0

您不應該在控制器show操作中添加任何內容。

在您的客戶show視圖中,您大概有權訪問@customer對象。由於你的has_many,這將有一個集合@customer.orders。因此,在視圖中,你可以這樣做

<table> 
<thead> 
    <td>Item</td> 
    <td>Quantity</td> 
    <td>Price</td> 
    <td>Date Placed<td> 
</thead> 

<% @customer.orders.each do |order| %> 
<tr> 
    <td><%= order.item.name %></td> 
    <td><%= order.quantity %></td> 
    <td><%= order.price %></td></tr> 
    <td><%= order.date_placed %></td> 
</tr> 
<% end %> 

</table> 

很顯然,我做了你要顯示的可能order領域,但是這應該給你的想法。

+0

謝謝!而已!另外,如果我想顯示訂單中的單個項目(使用我得到的line_items控制器),我會在客戶模型中放置「has_many:line_items,through::orders」,然後將其作爲order.line_item進行引用。名稱? – ecs

+1

你可能不希望把一個'的has_many through'對客戶line_items,因爲line_items只有在它們的順序('的has_many through'的上下文中有意義會使顧客有line_items獨立訂單的大斗)。如果命令has_many是line_items,那麼當你迭代命令(如上)並且有一個給定的順序時,你可以執行'order.line_items.each do | line_item |'並在循環內循環這些循環。 –

+0

請你可以發佈一個嵌套循環的代碼 - 我已經嘗試過多種方式做它,我收到錯誤消息!非常感謝! – ecs

0

在你的表演動作:

def show 
    @customer = Customer.find(params[:id]) 
    end 

在你的routes.rb:

resources :customers 

在你看來:

<table> 
<% @customer.orders.each do |order| %> 
    <tr> 
    <td><%= order.id %></td> 
    <td><%= And Other Your Order Fields %></td> 
    </tr> 
<% end %> 
</table>