Ruby on rails 如何使用ActiveRecord查询有限的记录集
在过去的几个小时里,这让我抓狂,因为我相信一定有一个简单的解决办法。假设我有以下模型:Ruby on rails 如何使用ActiveRecord查询有限的记录集,ruby-on-rails,activerecord,limit,where,Ruby On Rails,Activerecord,Limit,Where,在过去的几个小时里,这让我抓狂,因为我相信一定有一个简单的解决办法。假设我有以下模型: class Post < ActiveRecord::Base has_many :comments end class Comment < ActiveRecord::Base belongs_to :post end 但这将返回4,这是有意义的,因为它将查找标记为true的前5条记录。我的问题是,如何仅对有限的结果集进行计数?我试过: first_five_comments
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
end
但这将返回4,这是有意义的,因为它将查找标记为true的前5条记录。我的问题是,如何仅对有限的结果集进行计数?我试过:
first_five_comments = post.comments.limit(5)
first_five_comments.where(flagged: true).count
这也返回4,因为它只是将关系链接在一起并执行与上面相同的查询
我知道我可以用一个简单的SQL语句来实现这一点,但似乎应该有一种更适合Rails的方式来实现。我是否必须在上述语句中添加.all,然后在返回的数组中进行计数?显然,这是行不通的:
first_five_comments = post.comments.limit(5).all
first_five_comments.where(flagged: true).count
因为我不能在数组中使用“where”。如果我必须这样做,我将如何在数组中搜索以获得计数
感谢您的帮助 您需要过滤数组,然后对其元素进行计数
post.comments.limit(5).select{ |comment| comment.flagged? }.size
或更短:
post.comments.limit(5).select(&:flagged?).size
注意:
select
是一种数组方法,它与SQL select语句没有任何关系。只是一条注释,但您说的是“first 2”和“last 2”,但您的查询没有任何顺序,所以说first/last没有真正意义。对不起,我忘记在我一直尝试的内容中添加order子句,我有“.order(:id)”谢谢,我能让最棒的一个发挥作用,我会把这个标记为答案,因为没有其他回应。我认为应该有一种方法可以在关系中执行,而不必通过数组执行。
post.comments.limit(5).select(&:flagged?).size