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. 順序:position檢索categoriescategory_relationships本屬性使得所得article_categories通過位置排序的;
  2. 渴望加載category_relationship對象其中user_id == @current_user.id因爲上面的代碼沒有這樣做。

我怎麼能作出這樣採取從預先加載的優勢呢?

+0

是否有一個原因爲什麼你在'Category'和'Comment'之間使用兩個不同的連接表? – amencarini 2012-04-05 20:56:48

回答

0

解決辦法:

  1. .order( 「category_relationships.position」)

  2. 想象急切裝載是cartessian產物與一些濾波,從而 「其中」 是過濾的包括最終結果(左加入)。但是可以通過where來完成,子查詢首先會根據用戶篩選類別,然後刪除您的位置。

+0

你能舉一些例子嗎? – Backo 2012-04-27 13:20:49