1

我目前有以下内容:

users = User.all   
comments = users.collect(&:comments)

但是,如果有数千条评论,我只想从每个用户那里收集 10 条,以限制进行的数据库查询的数量。有没有办法做到这一点?

4

4 回答 4

1
users = User.all
comments = users.collect { |user| user.comments.limit(10) }

或与您模型中的另一个关联:

has_many :first_comments, :class_name => "Comment", :limit => 10

那么这将导致只有两个数据库查询:

users = User.includes(:first_comments)
comments = users.collect(&:first_comments)
于 2012-08-12T08:09:12.723 回答
0

试试这个

comments = Comment.where(:user_id=>users).limit(10)

或者

comments = Comment.all(:conditions => {:user_id=>users}, :limit => 10)

您可以使用任何适合您的

于 2012-08-12T07:14:10.207 回答
0

最简单的查询看起来有点复杂:

Comment.where(["user_id IN (?)", users.collect(&id) ]).limit(10)

我认为您的排序顺序是由某处的默认范围设置的。

导轨 2:

Comment.all(:conditions => ["user_id IN (?)", users.collect(&id) ], :limit => 10)
于 2012-08-12T07:24:35.943 回答
0
users = User.all
comments = Comment.order("DESC created_at").limit(10).all

或者,如果你只需要这 10 条最近评论的用户,你可以试试

comments = Comment.includes(:users).order("DESC created_at").limit(10).all
users = comments.map(&:user)
于 2012-08-12T07:27:00.200 回答