Rails 4,has_many通过关联 – 查找关联的对象

我想知道为什么Item.where(category: x)不适合我。 我希望这个语句能够返回分类在类别x下的所有项目。 请看下面我的协会:

 class Category  :categorizations end class Item  :categorizations end class Categorization < ActiveRecord::Base belongs_to :item belongs_to :category end 

Category.find(1).items返回该类别的所有项目。 请参阅下面的byebug控制台输出,它进一步说明了我的观点。 看起来生成的SQl正在寻找Item表中的类别列 – 当然不存在。 有任何想法吗?

  1: class ItemsController  6: end 7: (byebug) Item.where(category: 1) Item Load (0.6ms) SELECT "items".* FROM "items" WHERE "items"."category" = 1 # (byebug) Category.find(1).items Category Load (0.7ms) SELECT "categories".* FROM "categories" WHERE "categories"."id" = $1 LIMIT 1 [["id", 1]] Item Load (1.7ms) SELECT "items".* FROM "items" INNER JOIN "categorizations" ON "items"."id" = "categorizations"."item_id" WHERE "categorizations"."category_id" = $1 [["category_id", 1]] #<ActiveRecord::Associations::CollectionProxy [#, #, #, #, #, #, #, #, #, #]> 

我认为使用has_many through获取相关对象的方法是执行以下操作:

 Item.joins(:categories).where(categories: {id: 1}) 

我还没有找到更好的做法。