You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails查询:在where条件中添加OR is NULL的实现方法

解决方案

你可以直接在where子句中通过SQL条件或者Arel来组合OR逻辑,无需使用.or方法重复整个查询:

方法1:使用原生SQL条件

如果year_period是时间范围类型(比如Date.today.beginning_of_year..Date.today.end_of_year),可以直接用SQL的OR拼接条件,借助占位符避免SQL注入:

Investor.left_join(:disbursements)
        .where("disbursements.disbursed_at IS NULL OR disbursements.disbursed_at BETWEEN ? AND ?", year_period.begin, year_period.end)

方法2:使用Arel(推荐,更贴合Rails风格)

通过Arel构建条件,既保证安全性,又能让Rails自动处理时间范围的SQL转换:

# 获取Disbursement表的Arel对象
disbursements_table = Disbursement.arel_table

Investor.left_join(:disbursements)
        .where(
          disbursements_table[:disbursed_at].eq(nil)
          .or(disbursements_table[:disbursed_at].in(year_period))
        )

这两种方式都能在同一个where中实现「disbursed_at为空 或 在指定时间范围」的筛选,不需要重复编写整个查询逻辑,适配原查询语句较长的场景。

内容的提问来源于stack exchange,提问作者Leticia Esperon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 11:55:20