Ruby on rails Model.where('false')如何工作?我不确定,上面的查询实际上在做什么

Ruby on rails Model.where('false')如何工作?我不确定,上面的查询实际上在做什么,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我可以看到查询正在运行以下内容: select * from <table_name> where (false); 但我的问题是: 哪里是假的,什么是假的?这是不是说整个记录都是假的,因为这里没有任何表列?如果是,那么记录的含义是什么,是假还是真 < P>以上查询是否考虑某个列从与模型相关的表中获取数据? < P>我以模型为用户 User.wherefalse将作为select users.*从users生成查询 因此,这将返回所有记录或限制11,即根据默认限制限制限制的记录 如

我可以看到查询正在运行以下内容:

select * from <table_name> where (false);
但我的问题是:

哪里是假的,什么是假的?这是不是说整个记录都是假的,因为这里没有任何表列?如果是,那么记录的含义是什么,是假还是真

< P>以上查询是否考虑某个列从与模型相关的表中获取数据?

< P>我以模型为用户

User.wherefalse将作为select users.*从users生成查询 因此,这将返回所有记录或限制11,即根据默认限制限制限制的记录

如问题中所述,“false”是一个字符串。 User.where'false'将作为select users.*从where false的用户生成查询 因此,如果不满足条件,则不会返回任何记录

如果我们使用true而不是false,那么只需提供更多关于将发生什么的信息 User.wheretrue将失败,ArgumentError不支持参数类型:true TrueClass

使用“true”作为字符串。 User.where'true'将作为select users.*从其中为true的用户生成查询 因此,这将返回所有记录或限制11,即根据默认限制限制限制的记录。 它的工作原理与User.wherefalse相同


注意:以上结果来自于SQL关系数据库中的Rails 5.2.3控制台,where子句中的条件称为谓词

它们是针对相关表和列值进行计算的布尔语句

例如,如果谓词值>100为true,或者select number from other_表中的语句值为true,则返回一行

包含谓词(如1=0或1=1)的查询并不少见,这些谓词基本上与您看到的相同—PredictAE为false或true

这样的谓词当然是一个常量,不管行值是多少,聪明的查询优化人员会注意到,如果为false,则会使优化短路,不返回任何行


虽然这种语法可能不会在所有RDBMS中都起作用,但ActiveRecord可能会为不同的数据库生成不同的代码。

在where false中,what is false或where true中,what is true?这是说整个记录是真是假,因为这里并没有任何表列的意义?如果是,那么记录的意义是什么,是真是假?@Mayureshssrivastava这里你的主要问题是ActiveRecord片段。我已经展示了为它生成的SQL查询。我不是SQL专家,但我可以告诉你们的是,当我们使用true/false时,它们在Rails级别上被处理来决定参数。但当我们将它们作为字符串'true'/'false'传递时,它们就会被添加到查询中。类似于当我们传递像“id=1”这样的查询字符串时的情况。要回答您的问题:“它考虑哪个列?”不确定,但它可能将这些值作为计算条件。当'true'返回所有记录时,如果'false'则不返回任何记录。它的工作原理类似于SQL注入