预加载嵌套关联和范围

2024-03-16

我是初学者,很难解释我的问题:

我的模型:

class Skill  
  has_many :categories
  has_many :positions, :through => :categories
end

class Category
  belongs_to :skill
  has_many :positions  
end

class Position
  belongs_to :category
  has_one :skill, :through => :category    
end

我可以成功地预加载所有内容,如下所示:

@skills = Skill.includes(:positions)

但有时我想对职位应用范围:

class Position
...
  scope :active, where(:hidden => false)
end

我希望我能做到:

@skills = Skill.includes(:positions.active)

相反,我在视图中应用范围,但急切加载不再起作用:

<%= skill.positions.acitve ... %>

是否可以同时具有预加载和作用域?


您可以使用另一个关联:

class Skill  
  has_many :categories
  has_many :positions, :through => :categories
  has_many :active_positions, :through => :categories
end

class Category
  belongs_to :skill
  has_many :positions  
  has_many :active_positions, :class_name => "Position", :conditions => {:hidden => false}
end

class Position
  belongs_to :category
  has_one :skill, :through => :category    
end

And then

@skills = Skill.includes(:active_positions)

但随后你会得到两个关联。如果你曾经使用过skill.positions,所有技能的位置将从数据库中加载。你应该只使用skill.active_positions.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

预加载嵌套关联和范围 的相关文章

随机推荐