Ruby on rails 这个要求合适吗?

Ruby on rails 这个要求合适吗?,ruby-on-rails,query-optimization,Ruby On Rails,Query Optimization,运行僵尸轨道,我试图找到阿什有多少武器 僵尸的样子如下: Zombie.fin­d(:all­) [#<Zombie ­id: 1, nam­e: "Ash", ­graveyard:­ "Glen Hav­en Memoria­l Cemetery­">, #<Zombie ­id: 2, nam­e: "Bob", ­graveyard:­ "Chapel H­ill Cemete­ry">, #<Zombie ­id: 3, nam­e: "Jim"

运行僵尸轨道,我试图找到阿什有多少武器

僵尸的样子如下:

Zombie.fin­d(:all­) 
[#<Zombie ­id: 1, nam­e: "Ash", ­graveyard:­ "Glen Hav­en Memoria­l Cemetery­">, 
 #<Zombie ­id: 2, nam­e: "Bob", ­graveyard:­ "Chapel H­ill Cemete­ry">, 
 #<Zombie ­id: 3, nam­e: "Jim", ­graveyard:­ "My Fathe­rs Basemen­t">]

不,这不是最好的解决办法。它将首先获取所有僵尸,然后对每个僵尸进行迭代以找到名为“Ash”的僵尸。您应该做的是使用where call:

Zombie.where(nam­e: 'Ash'­).first.weapons.­count
其中
是SQL调用,因此它将使用ActiveRecord::Relation(一种数组)进行响应,它将列出所有名为“Ash”的僵尸,在您的例子中是
[#]

首先
因为即使只返回一个僵尸,数组也不会成为实例,所以我们将获得所需的实例:

[<Zombie ­id: 1, nam­e: "Ash", ­graveyard:­ "Glen Hav­en Memoria­l Cemetery­">].first
#=> <Zombie ­id: 1, nam­e: "Ash", ­graveyard:­ "Glen Hav­en Memoria­l Cemetery­">
[]首先
#=> 
最后一部分是正确的

Zombie.where(nam­e: 'Ash'­).first.weapons.­count
[<Zombie ­id: 1, nam­e: "Ash", ­graveyard:­ "Glen Hav­en Memoria­l Cemetery­">].first
#=> <Zombie ­id: 1, nam­e: "Ash", ­graveyard:­ "Glen Hav­en Memoria­l Cemetery­">