我想使用 ActiveRecord for Rails 生成以下 SQL 查询:
SELECT * FROM users WHERE (((1 IS NULL) OR (10 > 20)) AND (2 IS NULL OR (10 > 1)));
Run Code Online (Sandbox Code Playgroud)
所以我写了以下范围:
where('1 IS NULL')
.or(where('10 > 20'))
.where('2 IS NULL')
.or(where('10 > 1'))
Run Code Online (Sandbox Code Playgroud)
但是我得到了一个稍微不同的查询:
SELECT * FROM users WHERE (((1 IS NULL) OR (10 > 20)) AND 2 IS NULL OR (10 > 1));
Run Code Online (Sandbox Code Playgroud)
请注意,第一个没有括号围绕AND在第一个之后的所有内容。这会影响我得到的结果(第一个查询评估为假而第二个为真)。
如何使用 ActiveRecord 编写第二个查询?
这个问题看起来非常相似:如何通过使用 Arel 向带有“or”和“and”子句的 SQL 查询正确添加括号?Arel 现在是 Rails 的一部分,所以任何答案都应该是相关的。
不同之处在于两个查询是相同的,这导致了关于如何使其更清晰的讨论,其次是针对旧版本的 Rails,因此答案似乎不起作用。
我也不想为此需要一个新的 …
我正在使用Ruby on Rails 3.2.2.我想知道以下的想法(从我之前的问题出生)是否正确:
我倾向于不使用第三方宝石(至少在可能和合理的情况下),因为它们可能随时被抛弃.此外,如果Ruby on Rails框架发生变化,我可能必须等待更新这些宝石才能将我的应用程序更新到最新的RoR版本.