我目前有以下内容:
users = User.all
comments = users.collect(&:comments)
但是,如果有成千上万的评论,我只想从每个用户收集10个来限制所做的数据库查询的数量。有没有办法做到这一点?
答案 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)