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})
我还没有找到更好的做法。
- Rails:使用“attributes”方法将属性从对象复制到另一个对象
- RoR:has_one“或其他”? (或者,没有inheritance的多态性。)
- 检索具有空数组的记录时出现问题
- Rails获得validation失败错误,但ActiveRecord错误模型中没有错误
- 多对多关系只能以Rails / Activerecord / devise的方式工作
- Rails named_scopeinheritance?
- 如何更新接受嵌套属性的深层嵌套模型?
- 我的模型有一个模型列表。 如何从数据库加载它但限制列表中的项目数?
- Ruby – LoadError enc / trans / single_byte