Ruby on rails 活动记录未检索数据

Ruby on rails 活动记录未检索数据,ruby-on-rails,ruby,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 5,一直在尝试从分类中提取产品,但它不起作用。当我进入时,从rails控制台 category=category.where(id:1) 将返回类别,但当我键入 category.products 返回 `NoMethodError: undefined method `products' for #<Category::ActiveRecord_Relation` `NoMethodError:for#的未定义方法'products'返回一个集合,而first返回一个类别,如错误所示 如果

一直在尝试从分类中提取产品,但它不起作用。当我进入时,从rails控制台

category=category.where(id:1)

将返回类别,但当我键入

category.products

返回

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

`NoMethodError:for#
的未定义方法'products'返回一个集合,而
first
返回一个类别,如错误所示


如果您选择了
Category。请查找(1)
,而不是它的工作位置。

第一个查询将为您提供一个类别集合,其中
id
1
匹配。因为只有一条记录可能与此查询匹配,所以集合中只有一个对象。但是,您不能直接调用集合上的
产品

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

要按id仅获取单个对象,请使用
find\u by(id:1)
或简单地使用
find(1)


请仔细阅读以了解更多细节

我如何在我的控制器中使用它来检索产品
category=category.find(1)
然后
category.products
但是如果您没有对类别执行任何操作,您可能希望执行
products=Product.joins(:category)。其中(categories:{id:1})
well类别将动态添加。因此,让我们在show controller上说,我如何使用像这样的东西`@categories=Category.find(params[:id])`我将命名您的变量
@Category
,因为您只有一个,然后你可以简单地做
@category.products
当我以他的方式称呼它时,我无法运行category.product.eachso如果我想在我的show controller中找到一个catefory,然后通过该类别循环获得产品,我该怎么做?