2013-04-07 43 views
1

我有一個Rails應用程序,我一直在努力。我已經設置了用戶,目錄和產品。Rails:無法訪問控制器中的父級ID創建操作

用戶有許多目錄。 目錄有許多產品。

在Products控制器中,我試圖創建一個產品。這是我目前擁有的功能:

def create 
    @product = @catalogue.products.build(params[:product]) 

    if @product.save 
    flash[:success] = "Product created!" 
    redirect_to @catalogue 
    else 
    flash[:error] = "Save error: Product not created." 
    render 'static_pages/home' 
    end 
end 

我有使用的before_filter設置@catalogue功能:

def get_catalogue 
    @catalogue = Catalogue.find_by_id(:catalogue_id) 
    end 

這個功能似乎沒有工作,當我的錯誤得到的是:

NoMethodError中的ProductsController#創建

未定義的方法'產品的零:NilClass

我認爲產品catalogue_id將在執行新操作後設置。

感謝您提前提供任何幫助。

+0

旁註:您可以在控制器的任何位置用'raise params.inspect'和'raise params.to_yaml'調試傳入參數。 – 2013-04-07 16:25:18

回答

2

我認爲問題出在before_filter。我認爲它應該使用params[:catalogue_id]而不是一個符號。

def get_catalogue 
    @catalogue = Catalogue.find_by_id(params[:catalogue_id]) 
end 
+0

嗨,感謝您的快速回復。我試過你的建議,但我似乎仍然得到同樣的錯誤。 – 1RailsBeginner1 2013-04-07 15:51:07

+0

你的服務器作爲'params'獲得了什麼? – 2013-04-07 15:53:56

+0

我不太確定如何回答。我是這個初學者。我有一個目錄顯示在http:// localhost:3000/catalogs/1上。我在那裏有一個鏈接到'新產品'鏈接的按鈕。這被設置爲匹配,如下所示:match'/ newproduct /',to:'products#new' – 1RailsBeginner1 2013-04-07 15:57:06

2

爲什麼不使用嵌套路由?

資源:目錄做

資源:產品

然後你可以使用

catalogue_products_path(@catalog ue)

這將允許在控制器中訪問params [:catalogue_id]給你。