限制收集红宝石

时间:2012-08-12 07:08:09

标签: ruby-on-rails ruby arrays

我目前有以下内容:

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

但是,如果有成千上万的评论,我只想从每个用户收集10个来限制所做的数据库查询的数量。有没有办法做到这一点?

4 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

试试这个

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

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

你可以使用任何适合你的人

答案 2 :(得分:0)

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

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

我假设您的排序顺序是由默认范围设置的。

Rails 2:

Comment.all(:conditions => ["user_id IN (?)", users.collect(&id) ], :limit => 10)

答案 3 :(得分: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)