我有两种模式:草稿和挑选。
草稿有一个实例方法@available_players,其中包含草稿中可用的一系列玩家。当我从Draft.rb中的方法内部调用@available_players时,我按预期获得了一系列玩家。
Pick是一个记录player_id,draft_id和team_id的模型。我也试图让它从Draft中的玩家阵列中删除玩家。当我尝试访问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!它只是不会返回非活动记录值,例如&#39; draft_object.available_players&#39;。
@available_players在草稿模型内部工作,当我在draft_spec.rb中测试它但不在pick_spec.rb中测试时。
我已经阅读了一些实例与类方法文档,但我有很多Draft实例,所以我相信我想让它成为一个实例方法。
答案 0 :(得分:0)
首先使用attr_reader而不是函数:good explanation
如果你想做Pick.draft_object使用@@或def self.draft_object
但最好的方法是使用ActiveModel
答案 1 :(得分: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