gpt4 book ai didi

ruby-on-rails - 如何只找到至少发表过一条评论的用户

转载 作者:行者123 更新时间:2023-12-04 03:38:10 25 4
gpt4 key购买 nike

我正在使用 Rails 2.3.5 。

这是一个标准案例。表是:用户、评论、用户评论。我需要找到所有状态为“活跃”并发布至少一条评论的用户。

我知道评论表可以有外键,但这是一个人为的例子。表中有两个用户。有两个评论。这两条评论都是由第一个用户发布的。

named_scope :with_atleast_one_comment, lambda { {
:joins => 'inner join user_comments on users.id = user_comments.user_id ' } }


named_scope :with_active_status, {:conditions => {:status => 'active'} }

当我执行
 User.with_atleast_one_comment.with_active_status 

我得到两个记录。由于这两条评论都是由一位用户发布的,因此我只需要一位用户。

有什么解决办法?

最佳答案

with_at_least_one_comment 范围的行为与您期望的不一样。正如问题中出现的那样,它将为 user_comments 中的每个条目选择一个用户。这会导致您看到的重复结果。当与 active_users 结合使用时,您将删除由 with_at_least_one_comment 返回的所有没有事件状态的记录。

让我们首先简化有问题的命名范围。
您不需要 lambda,因为没有要采用的参数,并且连接可以外包给 Active Record,如果给定关联,它会执行内部连接。

简而言之,这个命名范围将完全符合您的要求。

named_scope :with_at_least_one_comment, :joins => :user_comments, 
:group => 'users.id'

关于ruby-on-rails - 如何只找到至少发表过一条评论的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2088718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com