Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ruby/rails范围内的原始SQL_Sql_Ruby On Rails_Ruby_Rails Activerecord - Fatal编程技术网

ruby/rails范围内的原始SQL

ruby/rails范围内的原始SQL,sql,ruby-on-rails,ruby,rails-activerecord,Sql,Ruby On Rails,Ruby,Rails Activerecord,我想了解以下两个版本的rails scope之间的区别。我相信它们的功能是一样的。但是,当使用这两种方法时,我发现生成的SQL有很多不同 版本1(原始SQL) 第2版 scope :ignore_unavailable, lambda { ids = Cars.select("id").where("status = 'NA'"); idsStr = '' idsarr = ids.collect{|car| car.id}.flatten where(["Item.id not in ("

我想了解以下两个版本的rails scope之间的区别。我相信它们的功能是一样的。但是,当使用这两种方法时,我发现生成的SQL有很多不同


版本1(原始SQL)


第2版

scope :ignore_unavailable, lambda { 
ids = Cars.select("id").where("status = 'NA'");
idsStr = ''
idsarr = ids.collect{|car| car.id}.flatten
where(["Item.id not in (" + idsarr.join(",") + ")"])
}
在我看来,版本2比版本1生成的查询更优化,但我不明白为什么会这样。
有人能解释一下这里会发生什么吗?

为什么您认为它更优化?如果您已经将一个db查询转换为2,为什么要混合项目和车辆id?它们之间有关系吗?这只是正在使用的众多作用域之一。到目前为止,我真的不知道为什么我使用V2时性能非常好,而使用V1时,我可以看到生成了大量额外的SQL,因此性能也会下降。请添加一个示例,说明每个版本生成的查询。它们应该在日志中。另外,即使是第二个版本也包含过多的SQL。超出了应有的范围。我已经在
scope :ignore_unavailable, lambda { 
ids = Cars.select("id").where("status = 'NA'");
idsStr = ''
idsarr = ids.collect{|car| car.id}.flatten
where(["Item.id not in (" + idsarr.join(",") + ")"])
}