使用:include和:conditions创建大查询?

时间:2011-07-21 09:12:31

标签: mysql ruby-on-rails ruby

我想获取由特定用户评论的所有帖子,其中包含创建者,编辑者,评论和论坛的热切加载。

Post.rb

named_scope :list_of_post {|user_id|
  {
    :include => [:creator,:editor,:comments,:forum],
    :conditions => ["comments.user_id = ?",user_id]
  }
} 

但是这个命名范围会为创建者,编辑者,评论和论坛创建一个大查询而不是小的IN查询。

这是因为使用:include和:条件一起发生。

任何返回IN查询的解决方案,而不是一个大查询。

2 个答案:

答案 0 :(得分:0)

我假设您正在使用rails 2 你可以这样做而不是范围:

Post.find(:conditions => {:id => user.comments.map(:post_id)}, :include => [...])

当您迁移到rails 3时,请查看squeel和ransack。它可以帮助您更轻松地完成请求。

答案 1 :(得分:0)

当你在那里投掷:joins => :comments时会发生什么?它必须加入才能进行搜索,但是显式设置连接会将其他表拉出查询吗?