Ruby on rails Rails:对方法的查询

Ruby on rails Rails:对方法的查询,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个带有国家栏和地区方法的机场模型 wherecountry:United,查询一列,返回一个很好的可用AR对象数组,类为Airport::ActiveRecord\u Relation 然而: Airport.where(region: nil) Airport Load (1.8ms) SELECT "airports".* FROM "airports" WHERE "airports"."region" IS NULL

我有一个带有国家栏和地区方法的机场模型

wherecountry:United,查询一列,返回一个很好的可用AR对象数组,类为Airport::ActiveRecord\u Relation

然而:

Airport.where(region: nil)      
  Airport Load (1.8ms)  SELECT "airports".* FROM "airports" WHERE "airports"."region" IS NULL                                                                                              
=> #<Airport::ActiveRecord_Relation:0x3fecc5d319f8>
它属于同一类,但几乎是一个密封的盒子,我不能称之为count或first或其他任何东西

我可以使用select获得正确的数组,但随后我的控制台会抛出大量的SQL查询,而不是一个


如何将所需的数据作为可访问的数组获取?

ActiveRecord全权负责为您从数据库获取信息,而且由于region是机场模型上的一种方法,而不是数据库列,因此您无法获得预期的结果。这在为您的查询生成的SQL语句中很容易看到-它正在查找一个名为region的列:

从airports.region为空的机场中选择airports.* 你关于选择正确方法的直觉是正确的。使用select不应生成SQL查询包。尝试:

Airport.all.select{| a | a.region.nil} 并检查生成的SQL。您应该看到如下内容:

机场负荷7.1ms从机场选择机场。*
也就是说,除非region内部有其他ActiveRecord查询,否则此时我们需要查看方法定义以做出任何其他判断。

您想要的数据是什么?此外,您应该考虑为国家创建一个规范化表,而不是在您的机场表中重复名称。拥有一个包含195行而不是数千个重复字符串的表要好得多。您最后说的一件事解决了这一问题:您的select示例有效,但region方法会进行查询,因此它们都来自于此。您能否共享您的region方法或更好的机场模型?