繁体   English   中英

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

[英]Can't access one model's instance variables from another model) (self.ruby)

我有两个模型,草稿和选择。 草稿在名为“ available_players”的实例变量中创建了一组可用的玩家。 这是使用“ before_save”回调完成的。 回调运行实例方法“ start”,而实例方法又运行“ set_active_players”。 我已经在Draft_spec中测试了所有这些功能,并且在加载播放器并将它们返回到available_players数组中时没有问题。 我所有的规格草案都通过了。

问题是,当我尝试从Pick.rb访问“ available_players”实例变量时,它返回nil。 如果我调用“ draft.start”(应在Draft.rb保存之前运行的实例方法),我可以突然访问“ available_players”数组...就好像草稿对象没有创建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不需要重新加载所有Player。 请帮助我访问available_players!

链接: 未能通过Pick specPick.rb

编辑:我应该添加@draft_object被发现使用

@draft_object = Draft.find(self.draft_id)

首先,这是错误的:

@draft_object = Draft.find(self.draft_id)

您已经建立了关联,因此请使用它。 您只需在Pick对象中使用draft即可访问其所属的Draft 无需将其分配给名为@draft_object的实例变量。

player同一个故事。

顺便说一句, Draftset_available_players方法只是循环遍历所有播放器,并将它们添加到实例变量中。 你为什么做这个? 如果您在Pick需要他们,为什么不直接直接吸引他们呢? 像这样:

@players = Player.all

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM