gpt4 book ai didi

ruby-on-rails - 无法从另一个模型访问一个模型的实例变量)(self.ruby)

转载 作者:行者123 更新时间:2023-11-28 21:30:18 25 4
gpt4 key购买 nike

我有两个模型,Draft 和 Pick。 Draft 在名为“available_players”的实例变量中创建一个可用玩家数组。这是使用“before_save”回调完成的。回调运行实例方法“start”,后者又运行“set_active_players”。我已经在我的 Draft_spec 中测试了所有这些,我可以毫无问题地加载球员并将他们返回到 available_players 数组中。我的所有草稿规范都通过了。

问题是,当我尝试从 Pick.rb 访问“available_players”实例变量时,它返回 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!

链接:failing Pick specs , Pick.rb

编辑:我应该补充一点,@draft_object 是使用

找到的
@draft_object = Draft.find(self.draft_id)

最佳答案

首先,这是错误的:

@draft_object = Draft.find(self.draft_id)

你已经建立了一个协会,所以使用它。您可以简单地在 Pick 对象中使用 draft 来访问它所属的 Draft。无需将其分配给名为 @draft_object 的实例变量。

player 相同的故事。

顺便说一下,您在Draft 中的set_available_players 方法只是遍历所有玩家并将他们添加到一个实例变量中。你为什么做这个?如果您需要玩家,为什么不直接在 Pick 中直接抓取他们呢?像这样:

@players = Player.all

另外...我有点担心您几乎所有的测试都被注释掉了。我希望这不是设计使然?

关于ruby-on-rails - 无法从另一个模型访问一个模型的实例变量)(self.ruby),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24834943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com