2016-07-22 1 views
-1

カテゴリから製品を引き出そうとしましたが、その製品は動作していません。私が入力したときに、レールコンソールからアクティブレコードがデータを取得していません

category = Category.where(id: 1)

カテゴリを返しますが、私は戻って

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

が、私は

を入力

category.products

リターンを入力すると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

最初のクエリでは、id1と一致するカテゴリのコレクションが表示されます。 1つのレコードだけがこのクエリと一致する可能性があるため、コレクションには1つのオブジェクトしか存在しません。ただし、コレクションに直接productsを呼び出すことはできません。

2番目のクエリでは、データベースで見つかった最初のカテゴリオブジェクトが既定の並べ替え順序で使用されます。 relation(collection)の代わりにアクティブなレコードのインスタンスなので、それを使って製品を呼び出すことができます。

idで1つのオブジェクトのみを取得するには、find_by(id: 1)または単にfind(1)を使用します。

詳しくはhttp://guides.rubyonrails.org/active_record_querying.htmlを完全に読んでください。

+0

私は私のショーコントローラーで料理を見つけるためにウォッチしたら、そのカテゴリーをループして製品を手に入れてください。 –

関連する問題