2016-07-22 106 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,然後通過該類別進行循環以獲取產品,我應該怎麼做? –