我有一个我一直在研究的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将在执行新操作后设置。
感谢您提前提供任何帮助。
答案 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]。