2

Я запускаю Ruby on Rails 3.1. Я хотел бы охотно загружать связанные объекты «второй степени», применяя некоторые условия, но у меня проблемы.Неисправность при загрузке связанных объектов «второй степени»

кажется, что я уже решил part of my issue с помощью:

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 

Приведенный выше код (это, кажется, сделать это правильно):

  1. загружает все categories, ухаживая за has_many :through:category_relationships (то есть, заботясь о состоянии .where(:category_relationships => {:user_id => @current_user.id}));
  2. все грузы article.comments.where(:user_id => @current_user.id).

Однако, я хотел бы сделать несколько больше:

  1. в заказе получен categories с помощью :position атрибута присутствует в category_relationships таким образом, чтобы полученные в результате article_categories являются упорядочены по позиции;
  2. до с нетерпением загружают также category_relationship объектов, где user_id == @current_user.id, так как вышеуказанный код этого не делает.

Как я могу это сделать, воспользовавшись удобной загрузкой?

+0

Есть ли причина, по которой вы используете две разные таблицы соединений между 'Category' и' Comment'? – amencarini

ответ

0

Решение:

  1. .order ("category_relationships.position")

  2. Представьте, жадную загрузку является cartessian продукта с некоторой фильтрацией так "где" фильтрует конечный результат включает (налево). Но это можно сделать с помощью where с подзапросом, который сначала будет фильтровать категории пользователем, а затем где вы можете удалить.

+0

Можете ли вы привести пример? – Backo

Смежные вопросы