我正在运行Ruby on Rails 3.1。我想通过应用一些条件来加载“二度”相关对象,但我遇到了麻烦。
似乎我已经通过使用:
解决了part of my issuearticle_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
按位置排序< / em>的; category_relationship
个user_id == @current_user.id
对象,因为上面的代码没有这样做。如何利用热切加载来实现这一目标?
答案 0 :(得分:0)
解决方案:
.order( “category_relationships.position”)
想象一下,急切加载是带有一些过滤的cartessian产品,所以“where”过滤了include的最终结果(真正的左连接)。但是可以使用带有子查询的where
来完成,首先会按用户过滤类别,然后可以移除您的位置。