我有两个模型,草稿和挑选。草稿在名为' available_players'的实例变量中创建一系列可用的玩家。这是使用&_ 39; before_save'打回来。回调运行实例方法' start'反过来运行' set_active_players'。我已经在Draft_spec中对所有这些进行了测试,我在加载玩家并将它们返回到available_players数组时没有任何问题。我的所有草案规范都通过了。
问题在于,当我尝试访问' available_players'来自Pick.rb的实例变量,它返回nil。如果我打电话给'draft.start' (应该在Draft.rb保存之前运行的实例方法),我可以突然访问' available_players'数组......它就像Draft对象没有创建available_players数组,即使我已经有了before_save方法。
以下是Pick.rb内部失败的代码:
def available_players_returns_nil
@draft_object.available_players
end
以下是Pick.rb中的代码:
def available_players_working
@draft_object.start
@draft_object.available_players
end
我不想每次调用方法时都要调用start,因为available_players不需要重新加载所有玩家。请帮我看看available_players!
编辑: 我应该补充说使用
找到@draft_object@draft_object = Draft.find(self.draft_id)
答案 0 :(得分:1)
首先,这是错误的:
@draft_object = Draft.find(self.draft_id)
您已设置关联,因此请使用它。您只需在draft
对象中使用Pick
即可访问其所属的Draft
。无需将其分配给名为@draft_object
的实例变量。
与player
相同的故事。
顺便提一下,set_available_players
中的Draft
方法只是循环遍历所有玩家并将其添加到实例变量中。你为什么做这个?如果你需要Pick
,你为什么不直接抓住玩家呢?像这样:
@players = Player.all
另外......我有点担心几乎所有的测试都被注释掉了。我希望这不是设计?