Я использую Ruby on Rails 3.1. Я бы хотел загружать связанные объекты «второй степени», применяя некоторые условия, но у меня проблемы.
Кажется, я уже решил часть моей проблемы , используя:
article_categories =
article
.categories
.includes(:comments => [:category_relationships])
.where(:category_relationships => {:user_id => @current_user.id})
где участвующие классы указаны следующим образом:
class Category < ActiveRecord::Base
has_many :comment_relationships
has_many :comments,
:through => :comment_relationships
...
end
class Comment < ActiveRecord::Base
has_many :category_relationships
has_many :categories,
:through => :category_relationships
...
end
Приведенный выше код (похоже, все делает правильно):
- загружает все
categories
, заботясь об ассоциации has_many :through
:category_relationships
(то есть, заботясь о состоянии .where(:category_relationships => {:user_id => @current_user.id})
);
- нетерпеливо загружает все
article.comments.where(:user_id => @current_user.id)
.
Однако я хотел бы сделать еще немного:
- до порядок извлекается
categories
с помощью атрибута :position
, присутствующего в category_relationships
, так что результирующие article_categories
упорядочены по позиции ;
- до нетерпеливая загрузка также
category_relationship
объектов, где user_id == @current_user.id
, поскольку приведенный выше код этого не делает.
Как это сделать, воспользовавшись энергичной загрузкой?