2016-07-22 76 views
-1

一直试图从产品类别中提取产品,但它不工作。从当我进入有效记录没有检索数据

category = Category.where(id: 1)

将返回类别,但是当我键入

category.products

就返回

`NoMethodError: undefined method `products' for #<Category::ActiveRecord_Relation` 

但是当我键入

铁轨控制台category = Category.first

然后做

category.products

我得到的所有属于该类别的产品。我究竟做错了什么?

回答

0

where返回一个集合,而first返回一个类别,如错误所述。

如果你做的是Category.find(1)而不是在哪里工作。

+0

我该如何在我的控制器中使用它来检索产品 –

+0

'category = Category.find(1)'然后'category.products',但是如果您对该类别没有做任何事情,您可能需要做'products = Product.joins(:category).where(categories:{id:1})' –

+0

井类别将被动态添加。所以让我们说在演示控制器上,我该如何使用像这样的'@categories = Category.find(params [:id])' –

0

第一个查询为您提供了一个类别集合,其中id匹配1。由于只有一条记录可能与此查询匹配,因此集合中只有一个对象。但是,您无法直接在集合上调用products

第二个查询为您提供使用默认排序顺序在数据库中找到的第一个类别对象。由于它是活动记录实例而不是关系(集合),因此可以调用产品。

要通过id获得单个对象,请使用find_by(id: 1)或者简单地使用find(1)

请仔细阅读http://guides.rubyonrails.org/active_record_querying.html了解更多详情。

+0

因此,如果我在我的show controller中找到catefory,然后通过该类别进行循环以获取产品,我应该怎么做? –