我是初学者,很难解释我的问题:
我的模特:
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 ... %>
是否可以同时拥有预先加载和范围?
答案 0 :(得分:7)
您可以使用其他关联:
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
然后
@skills = Skill.includes(:active_positions)
但是你会得到两个联想。如果您使用skill.positions
,则将从数据库加载所有技能的位置。您应该只使用skill.active_positions
。
答案 1 :(得分:0)
试试这个:
@skills = Skill.includes(:positions).where('position.active = TRUE')