Rails 查询包括不工作
Posted
技术标签:
【中文标题】Rails 查询包括不工作【英文标题】:Rails query include not working 【发布时间】:2013-04-01 08:37:51 【问题描述】:在我的应用中,我有 3 个模型:Item、Category 和 Categorization 定义如下:
class Item < ActiveRecord::Base
attr_accessible :name, :description
has_many :categorizations
has_many :categories, :through => :categorizations
end
class Category < ActiveRecord::Base
attr_accessible :name, :description, :parent, :children, :items, :parent_id
has_many :children, :class_name => "Category", :foreign_key => "parent_id", :dependent => :nullify
belongs_to :parent, :class_name => "Category"
has_many :categorizations
has_many :items, :through => :categorizations
end
class Categorization < ActiveRecord::Base
attr_accessible :category, :item
belongs_to :category
belongs_to :item
end
但是,这样做:
Category.where(:parent_id => self.id).includes(:items)
不会将与该类别关联的项目返回给我。我在这里错过了什么?
【问题讨论】:
“不会将与该类别关联的项目返回给我”到底是什么意思?您预计会发生什么以及会发生什么? 我期待我可以访问 where 获得的类别中的 :items,但 :items 是空的。 当使用includes
时,您可能会得到空的items
。如果您只想检索包含项目的类别,则必须使用 joins
,它会进行内部连接。
@Rui 你解决了吗?
【参考方案1】:
试试这个:
Category.where(parent_id: id).joins(:items)
【讨论】:
【参考方案2】:试试这个:
Category.where(:parent_id => id).collect(&:items)
它将返回匹配where
子句的所有类别的项目。
【讨论】:
使用includes
的重点是防止N+1 查询。这将执行 N+1 个查询。
那你应该从Item
开始。试试这个,Item.joins(:categorizations => :category).where('categories.parent_id' => id)
不,你应该使用includes
。它没有任何问题。
Category.where(:parent_id => self.id).includes(:categorizations => :item)
以上是关于Rails 查询包括不工作的主要内容,如果未能解决你的问题,请参考以下文章
Bootstrap Dropdowns 与 Rails 4 间断工作
尝试允许通用数组或值查询,如 rails 用于允许 where(a: [1]) 或 where(a: 1) 工作等等