Ruby on rails 这个要求合适吗?
运行僵尸轨道,我试图找到阿什有多少武器 僵尸的样子如下:Ruby on rails 这个要求合适吗?,ruby-on-rails,query-optimization,Ruby On Rails,Query Optimization,运行僵尸轨道,我试图找到阿什有多少武器 僵尸的样子如下: Zombie.find(:all) [#<Zombie id: 1, name: "Ash", graveyard: "Glen Haven Memorial Cemetery">, #<Zombie id: 2, name: "Bob", graveyard: "Chapel Hill Cemetery">, #<Zombie id: 3, name: "Jim"
Zombie.find(:all)
[#<Zombie id: 1, name: "Ash", graveyard: "Glen Haven Memorial Cemetery">,
#<Zombie id: 2, name: "Bob", graveyard: "Chapel Hill Cemetery">,
#<Zombie id: 3, name: "Jim", graveyard: "My Fathers Basement">]
不,这不是最好的解决办法。它将首先获取所有僵尸,然后对每个僵尸进行迭代以找到名为“Ash”的僵尸。您应该做的是使用where call:
Zombie.where(name: 'Ash').first.weapons.count
其中
是SQL调用,因此它将使用ActiveRecord::Relation(一种数组)进行响应,它将列出所有名为“Ash”的僵尸,在您的例子中是[#]
首先
因为即使只返回一个僵尸,数组也不会成为实例,所以我们将获得所需的实例:
[<Zombie id: 1, name: "Ash", graveyard: "Glen Haven Memorial Cemetery">].first
#=> <Zombie id: 1, name: "Ash", graveyard: "Glen Haven Memorial Cemetery">
[]首先
#=>
最后一部分是正确的
Zombie.where(name: 'Ash').first.weapons.count
[<Zombie id: 1, name: "Ash", graveyard: "Glen Haven Memorial Cemetery">].first
#=> <Zombie id: 1, name: "Ash", graveyard: "Glen Haven Memorial Cemetery">