2015-12-11 61 views
3

當我嘗試運行我的代碼時,出現上述錯誤。 這裏是我的giftcards_controller.rb:缺少必需的鍵:[:id]在父視圖中編輯的鏈接

def edit 
    @order = Order.find(params[:order_id]) 
    @giftcard = @order.giftcard.where(giftcard_id params[:id]) 
end 

這裏是我的訂單/ new.html.erb觀點:

<%= link_to edit_order_giftcard_path(@order), data: { modal: true } do %> 
    <p>Edit card</p> 
<% end %> 

中的routes.rb文件:

resources :orders, only: [:new, :create, :update, :edit] do 
    resources :giftcards, except: [:index, :show] 
end 

和錯誤:

(No route matches {:action=>"edit", :controller=>"giftcards", :id=>nil, :order_id=>#<Order id: 1, subtotal: #<BigDecimal:7fa963be4330,'0.3E1',9(18)>, tax: nil, shipping: nil, total: nil, created_at: "2015-12-11 09:00:30", updated_at: "2015-12-11 09:00:30", guid: "gaavqd", stripe_id: nil, email: nil, billing_address_id: nil, shipping_address_id: nil, bill_to_shipping_address: false, giftcard_id: nil>} missing required keys: [:id]): 

我怎麼能通過ID?

回答

2

在顯示的錯誤中,您似乎傳遞了一個對象,並且您希望它只傳遞該ID。你可以做到這一點:

<%= link_to edit_order_giftcard_path(@order.id), data: { modal: true } do %>

+0

謝謝,我用「@giftcard = @ order.giftcard(PARAMS做到了[:ID ])「在控制器和」link_to edit_order_giftcard_path(@ order.id,:giftcard)「在我看來 –

2

你需要確保你傳遞id的爲nested resource兩個元素。

當你具備以下條件:

resources :orders, only: [:new, :create, :update, :edit] do 
    resources :giftcards, except: [:index, :show] 
end 

...這意味着giftcards將可如果你有一個order定義過。

因此,你要確保你建立你的鏈接如下:

<%= link_to edit_order_giftcard_path(@order, @giftcard) ... %> 

的另一個重要因素,瞭解wherefind之間的區別:

@giftcard = @order.giftcard.where(giftcard_id params[:id]) 

這是而不是有效的代碼。

首先,您使用的是where,它吸引了多個元素(這在您的link_to中不起作用)。其次,它的引用giftcard時,我相信你會需要giftcards ...

您需要:

def edit 
    @order = Order.find(params[:order_id]) 
    @giftcard = @order.giftcards.find params[:id] 
end 
+0

謝謝,我知道我的控制器很爛,我不知道爲什麼我敢在這個州出版。 –

+0

哈哈沒問題,只需進行調整並繼續! –

相關問題