Rails 上的链接 ruby​​ 查询返回那些不为零的值

Fal*_*lko 2 ruby ruby-on-rails

我正在查询 Active Record 并希望将两个查询链接在一起。

我的问题是,当我想返回那些属性不为零的记录时,它不会返回我知道存在的任何记录:

user.change_requests.where("action_at = ?", req.action_at).where("cancelled_at != ?", nil)
Run Code Online (Sandbox Code Playgroud)

这基本上返回一个空数组,但我期望一个数组change_requests

小智 5

麦克斯在上面的评论中给出了正确的答案。where.not编写sql时可以使用ActiveRecord语法NOT

来自ActiveRecord 文档

2.4 NOT 条件

NOT SQL 查询可以通过以下方式构建where.not

Client.where.not(locked: true)

换句话说,可以通过调用不带参数的 where 来生成此查询,然后立即链接而不传递 where 条件。这将生成如下 SQL:

SELECT * FROM clients WHERE (clients.locked != 1)

对于您的具体情况,代码如下所示:

user.change_requests.where(action_at: req.action_at).where.not(cancelled_at: nil)
Run Code Online (Sandbox Code Playgroud)