关系发现误解

时间:2013-01-17 03:15:42

标签: database ruby-on-rails-3 methods

也许我忽略了一些显而易见的事情,但我正在尝试将一个实际场景应用于僵尸教程的这个轨道。

--------问题------------ 假设模型和关系被正确定义,找到属于Zombie'Ash'的所有武器。

class Zombie < ActiveRecord::Base
  has_many :weapons
end

class Weapon < ActiveRecord::Base
  belongs_to :zombie
end

本教程接受 -

的答案
z = Zombie.find(1)
[#<Zombie ­id: 1, nam­e: "Ash", ­graveyard:­ "Glen Hav­en Memoria­l Cemetery­">]

z.weapons
[#<Weapon ­id: 1, nam­e: "Hammer­", strengt­h: 1, zomb­ie_id: 1>]

但是对于我来说这不太实际,好像我正在研究这个项目并提出这类问题我会这样做。

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

但是

ash.weapons

给出输出

#<NoMetho­dError: un­defined me­thod `weap­ons' for #­<ActiveR­ecord::Rel­ation:0x00­0000163347­38>>

当找到僵尸的输出完全相同时,这是怎么回事?鉴于问题的框架方式(即使它们提供数据库表),我找到僵尸的方式更加实用。它可能是codechool交互式控制台的细微差别,还是我错过了什么?

感谢您的关注。

1 个答案:

答案 0 :(得分:2)

结果表明:

[#<Zombie ­id: 1, nam­e: "Ash", ­graveyard:­ "Glen Hav­en Memoria­l Cemetery­">]

这是一种强化阵容。 所以,如果你愿意:

ash = Zombie.where(:name => "Ash").first
ash.weapons

将返回所有武器。