2013-04-07 47 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]给你。