2013-12-17 46 views
0

我試圖用兩個其他表中的ID填充連接表,添加用戶ID相對容易,因爲設計但其他Id正在給出我在創建方法問題。如何使用控制器中的創建方法填充連接表

UserItems表保存其id爲user_id和item_id,其兩個表之間的鏈接允許多對多關係。

這裏是代碼

def create 
    @user_item = UserItem.new(user_item_params) 
    @user_item.user_id = current_user.id 
    @user_item.item = Item.find(params[:item_id]) 


    if @user_item.save 
    redirect_to @user_item, notice: 'successfully created.'   
    else 
    render action: 'new'   
    end  
end 

user_item_params在user_items_controller.rb的方法以及

def user_item_params 
    params.require(:user_item).permit(:item_id, :user_id) 
end 

此行

@user_item.item = Item.find(params[:item_id]) 

是行,我認爲我有錯,我不認爲它用正確的項目ID填充表格。

我正在通過測試驅動開發來做到這一點,當前失敗的測試應該得到一個404,如果一個用戶或項目不存在給定的user_item。由於404沒有找到這些項目時自動呈現添加這些代碼行應該修復。但他們不是。

我在代碼中設置了正確的關係,我不想用完整的控制器來混淆問題。

與往常一樣,任何幫助非常感謝,感謝您的時間。

+0

你在哪裏設置你的'@ item'變量,如果你有一個名爲項目和模型中使用? –

+0

這就是問題,我沒有@item在這裏設置我試過'@item = Item.find(params [:id])'但那不起作用,我以爲我會離開我放的代碼這裏以其最簡單的破碎形式。 –

回答

0

您沒有向我們顯示任何錯誤消息或演示了哪些功能無法正常工作,但是有一些突出點從代碼中跳出。

  1. 你不經常更新的直接連接表,通常你會做這樣的事情current_user.items << @item
  2. 你似乎並沒有被初始化@item任何地方
  3. 如果您要創建一個新的UserItemuser_item_params,你應該不必再手動分配的屬性,如果你的PARAMS是正確的

什麼是真正有用的是確切地知道你的params散的樣子,通用電氣了解你實際發佈的內容。

+0

編輯的問題嘗試使其更清晰。感謝您的意見。 –

+0

你似乎只是猜測該做什麼,不要通過猜測來編碼。檢查你在控制器上收到的參數,你是否得到一個Item對象的ID?如果是的話,這個參數叫做什麼?你的表單POST的URL是什麼?等 –

0

,你可以,如果你定義的關聯

@user_item.item = Item.find(params[:item_id]) 

否則

@user_item.item_id = Item.find(params[:item_id]).id 
+0

我已經測試了這兩個但他們都沒有在我的代碼工作。 我的測試用例仍然失敗。 –

+0

是測試用例特有的問題,或者運行代碼 –

+0

的具體測試用例,因爲我知道它會失敗,所以我根本沒有運行代碼。我正在使用Rspec來測試和開發整個應用程序。 –

相關問題