2013-06-19 59 views
0

我已經款設立這樣的:如何爲has_and_belongs_to_many關聯創建新項目?

項目 has_and_belongs_to_many BatchTicket

我怎麼可以定義爲新的批量票據創建BatchTicket控制器@batch_ticket? 這不起作用:

class BatchTicketsController < ApplicationController 
    def new 
    @batch_ticket = item.batch_tickets.build 
    end 
end 

我不知道如何正確識別「項目」。參數[]中沒有任何內容。我把ID放在下面的'li'中。

代碼嘗試(正確列表)創建一個新的BatchTicket:

<h4>New Orders</h4> 
<ul> 
    <% @items_to_plan.each do |item| %> 
     <li id="<%= item.id %>"><%= item.item_code %> <%= link_to "new", new_batch_ticket_path(item) %> | 
     <%= link_to "cmb", '#' %></li> 
    <% end %> 
</ul> 

我得到的錯誤是:

undefined local variable or method `item' for #<BatchTicketsController:0x007ff1bd48f808> 
+0

首先使用item.find創建項目對象(params [:id]) –

回答

2

通過傳遞item作爲參數傳遞給new_batch_ticket_path,你」已經通過params[:item_id]隱含地將item_id傳遞給您的控制器。使用它,您可以查找相應的Item對象,您需要:

假設您使用RESTful路由,您的new_batch_ticket_path不希望收到任何參數。因此,您需要顯式聲明您傳遞的任何內容作爲GET變量。在這種情況下,你應該通過item.iditem_id

<%= link_to "new", new_batch_ticket_path(:item_id => item.id) %> 

# app/controllers/batch_tickets_controller.rb 
def new 
    if params[:item_id] 
     item = Item.find(params[:item_id]) 
     @batch_ticket = item.batch_tickets.build 
    else 
     @batch_ticket = BatchTicket.create 
    end 
end 

的通知如果其他條件?爲了處理新行爲被稱爲而沒有傳遞GET item_id變量的情況,您需要這樣做。請記住,你的路由並不期望被傳遞任何參數,所以當一個變量被傳遞時,以及在一個變量沒有被傳遞時,你需要處理兩個實例。

相關問題