如何:仅基于条件语句包含

时间:2011-07-21 01:50:52

标签: ruby-on-rails ruby-on-rails-3

我正在尝试抓取帖子,只根据条件获取属于该帖子的评论:

# Grab all posts but only include comments that have been approved.
Post.all(:include => :comments, :conditions => ['comments.approved = ?', true])

2011年7月20日更新时间:美国东部时间10月11日

为了澄清,我试图抓住所有帖子,只抓住特定用户对该帖子的评论。

def grab_posts_and_only_comments_from(user)
   {:include => [:comments], :conditions => ['comments.user_id = ?', user.id]}
end

2011年7月20日更新美国东部时间11:34

在已检查答案的评论中回答。

2 个答案:

答案 0 :(得分:3)

Post.includes(:comments).where("comments.approved = ?", true)

EdgeGuides对此功能的文档进行了大量改进。查看第12.2节here

答案 1 :(得分:1)

只需添加新关联approved_comments

即可
class Post < AR::Base
  has_many :comments
  has_many :approved_comments, :class_name => "Comment", :conditions => { :approved => true }
end

Post.includes(:approved_comments)
# or for Rails 2.x
Post.all(:include => :approved_comments)

修改

Post.includes(:approved_comments).where(:approved_comments => {:user_id => user.id})