我有一些球员,球员有交易状态。而不是硬编码贸易状态,如“活动”和“非活动”,然后必须去寻找字符串,我想我会很聪明,有一个单独的 TradeState 模型,这样玩家就有一个 trade_state_id(玩家只能在一次一个贸易状态)。
现在,通过使用命名范围然后说“Player.active”来获取所有活跃玩家将是一种方便。为此,我需要获取与“活动”匹配的 TradeState 记录的 ID,因此我在 Player 类中提出了这一点:
named_scope :active, :conditions => {:trade_state_id => TradeState.active.first.id}
这在脚本/控制台中测试时就像一个魅力,但当我去测试时它不起作用。我正在使用 RSpec,但我怀疑这无关紧要。当我运行最简单的测试时,我收到以下错误:
“将 id 称为 nil,它会错误地为 4”
据我所知,测试框架正在按字母顺序加载和解析模型。框架解析 Player 模型中的 named_scope 调用,并尽职尽责地查找第一个处于活动状态的 TradeState 记录的 id。但是,该模型尚未处理并且尚未准备好,因此有关获取 nil 的 id 的错误。
起初我以为是因为 trade_states 表中可能没有任何记录,所以我在 before(:each) 块中创建并保存了我需要的 trade_states,但这不起作用。所以我做了一些固定装置并尝试加载它们,但这没有用。
这看起来有道理吗?还有其他解释吗?变通工作怎么样?我可以尝试模拟 TradeState 对象,我会试一试。
非常感谢您的宝贵时间。