Rails:无法在控制器创建操作中访问父ID

时间:2013-04-07 15:38:50

标签: ruby-on-rails

我有一个我一直在研究的Rails应用程序。我已经设置了用户,目录和产品。

用户拥有许多目录。 目录有很多产品。

在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

此功能似乎不起作用,因为我得到的错误是:

ProductsController中的NoMethodError #create

未定义的方法`产品'为nil:NilClass

我假设产品catalogue_id将在执行新操作后设置。

感谢您提前提供任何帮助。

2 个答案:

答案 0 :(得分:2)

我认为问题出在before_filter。我认为它应该使用params[:catalogue_id]而不是符号。

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

答案 1 :(得分:2)

为什么不使用嵌套路由?

  

资源:目录

     
    

资源:产品

  
     

然后你可以使用

  

catalogue_products_path(@catalogue)

将允许在控制器中访问params [:catalogue_id]。