簡體   English   中英

Ruby:從另一個類調用實例方法

[英]Ruby: Calling an instance method from another class

我有兩個模型:草稿和選擇。

草稿具有@available_players實例方法,該方法在草稿中具有一組可用的播放器。 當我從Draft.rb中的方法內部調用@available_players時,我得到了預期的播放器數組。

Pick是一個記錄player_id,draft_id和team_id的模型。 我還試圖將其從草稿中的播放器數組中刪除播放器。 當我嘗試訪問Draft.rb中的播放器數組(使用(draft_instance).available_players)時,顯示為nil。

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中對其進行測試時。

我已經閱讀了一些實例方法與類方法文檔,但是我有許多Draft實例,所以我想我想將它作為實例方法。

首先使用attr_reader代替函數: 很好的解釋

如果您嘗試執行Pick.draft_object,請使用@@或def self.draft_object

但最好的方法是使用ActiveModel

您在哪里調用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM