ruby-on-rails - 根据其子项(或没有子项)的属性的 Rails 范围

标签 ruby-on-rails ruby activerecord

我有 2 个模型:SopheadSopheadIssue

SopheadIssue属于Sophead,

Sophead 有很多 SopheadIssues(可选)。

我想在 Sophead 模型上为满足以下 2 个条件之一的 Sopheads 创建一个范围:

  1. Sophead 完全没有 SopheadIssues
  2. Sophead 没有 SopheadIssues 的 SopheadIssue 属性为 (active=true)。

目前我尝试了以下方法:

scope :no_issue, -> { joins(:sophead_issues).where.not("active = ?", true) }

但这不起作用,因为它缺少没有任何 SopheadIssues 的 Sopheads。

非常感谢任何帮助。
非常感谢!

最佳答案

问题是 joinsINNER JOIN 并且它过滤掉 sophead 而没有 sophead_issues。您需要使用 left_joins这里:

scope :no_issue, -> { left_joins(:sophead_issues).where("sophead_issues.active != ? OR sophead_issues.sophead_id IS NULL", true) }

关于ruby-on-rails - 根据其子项(或没有子项)的属性的 Rails 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51860007/

相关文章:

ruby-on-rails - 过滤一个有很多参数的数组 "like an SQL query"

ruby-on-rails - 在 Rails 4 中默认禁用强参数

ruby - min_by Ruby(关联数组中的最小值)

ruby-on-rails - ActiveRecord 事务只是到数据库的 1 次往返吗?

ruby - 打印变量

css - foundation-icons-sass-rails 图标未显示在按钮中

php - Yii:在 mysql 服务器上使用自动提交关闭的事件记录

MySQL 外键问题 rails

ruby-on-rails - Rails find_or_create_by 带/不带哪里

ruby-on-rails - 在创建时设置 has_one 关联的初始 id