date = Date.today
Subscription.joins(:cart).where("'#{date.beginning_of_week(:sunday).to_s}' != ANY (carts.skipped_weeks)")
购物车上的skipped_weeks列是一个日期数组,如[“2017-04-10”,“2017-04-17”]
我正在运行上面的查询并仍然接收和记录了cart.skipped_weeks列数组中包含的日期,我只想要在skipped_weeks数组中不包含该日期的记录。
答案 0 :(得分:1)
Subscription.joins(:cart).where("NOT '#{date.beginning_of_week(:sunday).to_s}' = ANY (carts.skipped_weeks)")
这是正确的表格
答案 1 :(得分:1)
PostgreSQL支持all
以及any
:
<强> 9.23.4。 ALL(数组)
expression operator ALL (array expression)
右侧是带括号的表达式,它必须产生一个数组值。使用给定的
operator
计算左侧表达式并将其与数组的每个元素进行比较,这必须产生布尔结果。如果所有比较都为真,则ALL
的结果为“true”(包括数组中零元素的情况)。如果发现任何错误结果,结果为“假”。
话说:
where('? != all(carts.skilled_weeks)', date.beginning_of_week(:sunday))
可能会更符合您的预期逻辑。