gpt4 book ai didi

ruby-on-rails - 使用 AND 和 OR 的复杂 Arel 条件

转载 作者:行者123 更新时间:2023-12-04 06:36:01 27 4
gpt4 key购买 nike

关于操作优先级,我有一个关于将多个条件与 ANDOR 组合在一起的问题。

因此,我需要生成以下 SQL 字符串以传递给 where 方法:

where("NOT ((assignments.to IS NOT NULL AND assignments.to < :start_date) OR assignments.from > :end_date)", start_date: date.at_beginning_of_week, end_date: date.at_end_of_week)

我用 Arel 重写了它:

table = Assignment.arel_table
where(
table[:from].gt(date.at_end_of_week).
or(
table[:to].not_eq(nil).and(table[:to].lt(date.at_end_of_week))
).not
)

但是 Arel 没有用 AND 将条件括起来,结果这个条件选择了错误的数据。我如何在这种情况下放置括号?

最佳答案

你可以使用table.grouping方法将表达式包裹在括号中,所以整个事情可以像这样

table = Assignment.arel_table
where(
table[:from].gt(date.at_end_of_week).
or(
table.grouping(table[:to].not_eq(nil).and(table[:to].lt(date.at_end_of_week)))
).not
)

关于ruby-on-rails - 使用 AND 和 OR 的复杂 Arel 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26019776/

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