[英]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.