2013-01-17 22 views
1

也許我忽略了一些明顯的東西,但我試圖將一個實際的場景應用到這個殭屍教程的rails上。關係查找誤解

--------問題------------ 假設模型和關係被正確定義,找到所有屬於殭屍'灰'的武器。

class Zombie < ActiveRecord::Base 
    has_many :weapons 
end 

class Weapon < ActiveRecord::Base 
    belongs_to :zombie 
end 

教程接受答案OF-

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交互式控制檯的細微差別,還是我錯過了一些東西?

感謝您的關注。

回答

2

當你的結果顯示本身:

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

這是某種形式加強了陣。 所以如果你會這樣做:

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

將返回所有的武器。

+0

我還是不確定我是否理解,因爲兩個陣列都被直接「加強」起來,但是對武器調用的反應卻不同。我想我的一個更大的問題是,我能否在實踐中使用我認爲是實際的呼叫? –

+1

當你發現(1)它會返回一個資源。哪裏會返回一個活躍的記錄關係。如果你在這兩種情況下都做了ash.class,你會發現它們是兩種不同的東西 –