我目前有以下内容:
users = User.all
comments = users.collect(&:comments)
但是,如果有数千条评论,我只想从每个用户那里收集 10 条,以限制进行的数据库查询的数量。有没有办法做到这一点?
我目前有以下内容:
users = User.all
comments = users.collect(&:comments)
但是,如果有数千条评论,我只想从每个用户那里收集 10 条,以限制进行的数据库查询的数量。有没有办法做到这一点?
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)
试试这个
comments = Comment.where(:user_id=>users).limit(10)
或者
comments = Comment.all(:conditions => {:user_id=>users}, :limit => 10)
您可以使用任何适合您的
最简单的查询看起来有点复杂:
Comment.where(["user_id IN (?)", users.collect(&id) ]).limit(10)
我认为您的排序顺序是由某处的默认范围设置的。
导轨 2:
Comment.all(:conditions => ["user_id IN (?)", users.collect(&id) ], :limit => 10)
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)