gpt4 book ai didi

ruby-on-rails - Rails 事件记录查询与 'exists' 的关联

转载 作者:行者123 更新时间:2023-12-02 23:44:01 24 4
gpt4 key购买 nike

我正在开发一款允许成员(member)进行调查的应用程序(成员(member)与 Response 具有一对多关系)。 Response 包含member_id、question_id 和他们的答案。

调查要么全部提交,要么不提交,因此,如果该成员(member)的响应表中有任何记录,则他们已完成调查。

我的问题是,如何重写下面的查询才能使其真正起作用?在 SQL 中,这将是 EXISTS 关键字的主要候选者。

 def surveys_completed
members.where(responses: !nil ).count
end

最佳答案

您可以使用includes,然后测试相关响应是否存在,如下所示:

def surveys_completed
members.includes(:responses).where('responses.id IS NOT NULL')
end

这是一个替代方案,带有连接:

def surveys_completed
members.joins(:responses)
end

使用 Rails 4 的解决方案:

def surveys_completed
members.includes(:responses).where.not(responses: { id: nil })
end
<小时/>

使用 activerecord_where_assoc 的替代解决方案:这个 gem 完全符合这里的要求:使用 EXISTS 来执行条件。它适用于最新版本的 Rails 4.1。

members.where_assoc_exists(:responses)

它还能做更多事情!

<小时/>

类似问题:

关于ruby-on-rails - Rails 事件记录查询与 'exists' 的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18234602/

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