2014-07-17 86 views
0

我有兩個模型:Draft和Pick。Ruby:調用另一個類的實例方法

草案有一個實例方法@available_players,它有一個草稿中可用的播放器數組。當我在Draft.rb的一個方法中調用@available_players時,我得到了預期的球員數組。

Pick是記錄player_id,draft_id和team_id的模型。我也試圖從草稿中的玩家陣列中移除玩家。當我嘗試訪問Draft.rb內的播放器數組(使用(draft_instance).available_players)時,我得到零。

Draft.rb:

def set_available_players 
    Player.all.each do |player| 
     @available_players << player 
    end 
end  

def available_players 
    @available_players 
end 

Pick.rb

def set_draft_object 
    @draft_object = Draft.find(self.draft_id) 
end 

def available_players 
    @draft_object.available_players 
end 

內部PICK方法available_players產生零。奇怪的是,如果我打電話給@ draft_object.id,我會得到正確的ID!它只是不會返回非活動記錄值,如「draft_object.available_players」。

@available_players在草稿模型中工作,當我在draft_spec.rb中測試它時,但在pick_spec.rb中測試不到。

我已經通讀了一些實例和類的方法文檔,但我有很多草案的實例,所以我相信我希望它是一個實例方法。

回答

0

首先使用attr_reader代替功能:good explanation

,如果你正在嘗試做Pick.draft_object使用@@或DEF self.draft_object

但最好的方法是使用作爲加載ActiveModel它應該

0

你在哪裏打電話給你的set_available_players方法?看起來它根本沒有被調用 - 如果是這樣,這就解釋了爲什麼available_players返回null。

這應該工作:

Pick.rb

def set_draft_object 
    @draft_object = Draft.find(self.draft_id) 
    @draft_object.set_available_players # THIS BIT IS NEEDED 
end 

def available_players 
    @draft_object.available_players 
end 
+0

你是完全正確 - 我不包括在這裏我叫我的模型方法 - 但我在另一種方法調用它...問題依然存在。 這裏是一個鏈接到[Github回購](https://github.com/Cheex11/drafter) – user220465

+0

嘗試以上,看看它是否工作(你可以刪除它之後)。如果確實如此,那麼您知道您的問題與正在對「set_available_players」進行的其他調用相關,您可以嘗試進行調試。 –

相關問題