我有一些球員和球員有貿易狀態。我認爲自己很聰明,並且有一個單獨的TradeState模型,這樣一個玩家有一個trade_state_id(一個玩家只能進入到遊戲中),而不是像「積極」和「不活躍」那樣的硬代碼交易狀態。一次一個交易狀態)。Rspec,模型加載順序,燈具和named_scope挑戰
現在,通過使用命名範圍,然後說「Player.active」,能夠獲得所有活動玩家將是一個方便。要做到這一點,我需要得到的匹配「活動」的TradeState記錄的ID,所以我在Player類想出了這個:
named_scope :active, :conditions => {:trade_state_id => TradeState.active.first.id}
在腳本/控制檯進行測試時,這個工程就像一個魅力,但是當我去測試時它不起作用。我正在使用RSpec,但我懷疑這是不恰當的。當我運行最瑣碎的測試,我得到以下錯誤:
「名爲id的零,這將被錯誤地4」
至於我可以告訴大家,測試框架加載和分析模型按字母順序排列。該框架解析Player模型中的named_scope調用,並盡職地查找活動的第一個TradeState記錄的標識。但是,該模型尚未處理,尚未準備好,因此導致無法獲得id的錯誤。
起初我以爲是因爲在trade_states表中可能沒有任何記錄,所以我創建並保存了之前(:each)塊中需要的trade_states,但這並不起作用。於是我做了一些固定裝置並嘗試加載它們,但那不起作用。
這看起來似乎合理嗎?還有其他解釋嗎?如何解決?我可以試着嘲笑TradeState對象,然後我就放棄了。
非常感謝您的時間。
我會說,「是」,你的數據庫中沒有任何東西,因此在nil上調用「id」(由TradeState.active.first返回)會引發錯誤。 我不能說爲什麼你的表是空的,因爲你只說「它沒有工作」沒有代碼。 – 2009-11-12 05:58:28