Ruby:从另一个类调用实例方法

时间:2014-07-17 23:19:06

标签: ruby-on-rails ruby methods associations instance

我有两种模式:草稿和挑选。

草稿有一个实例方法@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实例,所以我相信我想让它成为一个实例方法。

2 个答案:

答案 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