Нежелательная загрузка вложенных связей и областей
Я новичок, и мне трудно объяснить мою проблему:
Мои модели:
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 ... %>
Возможно ли иметь как загружаемую загрузку, так и область видимости?
Ответы
Ответ 1
Вы можете использовать другую ассоциацию:
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
.
Ответ 2
Попробуйте следующее:
@skills = Skill.includes(:positions).where('position.active = TRUE')