在过去的几个小时里,这一直让我发疯,因为我确信必须有一个简单的解决方案。假设我有以下模型:
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
end
并且 Comment 模型有一个名为 Flagged 的属性。假设该帖子有 10 条评论,并且前两条和后两条已被标记为已标记。
我想计算一篇帖子的前 5 条评论中有多少条已被标记。在这种情况下,我想返回 2。所以起初我尝试:
post.comments.limit(5).where(comments: { flagged: true }).count
但这会返回 4,这是有道理的,因为它会找到 flagged 为 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”。如果我必须这样做,我将如何在数组中搜索以获取计数?
任何帮助表示赞赏!