2012-05-21 74 views
0

運行RSpec和FactoryGirl時,它會自動將任何:id參數轉換爲fixnum,而在現實生活中,它會作爲字符串傳遞。代碼我有那個:id作爲複合主鍵的進程試圖調用分割params[:id]。這導致異常,像這樣:爲什麼is_a?無法匹配類型,並導致分裂引發異常?

NoMethodError: 
    undefined method 'split' for 234:Fixnum 

當試圖調用是這樣的:

@myinstance = MyClass.find(params[:id].split("-").map{|x| x.to_i}) 

在試圖解決這個問題,我添加了一個簡單的類型檢查:

if params[:id].is_a? Fixnum 
    @myinstance = MyClass.find(params[:id]) 
else 
    @myinstance = MyClass.find(params[:id].split("-").map{|x| x.to_i}) 
end 

然而,這並不像我預期的那樣工作。 if語句評估爲false,並且split仍在嘗試,導致相同的錯誤。 Ruby如何將params[:id]識別爲「else」邏輯中的Fixnum,但在if語句中未能評估爲true

回答

3

這是純粹的邏輯:params[:id]Stringnil

哦......我必須編輯我的答案:

當你這樣做控制器的規格,你發送的PARAMS發送as-is,而不是字符串化...... 這是一個痛苦的,但它應該早晚固定。

所以在你的規格中,把你的參數變得更接近現實。

這是一個非常重要的一點:不要調整你的代碼到你的規格,做相反的事情。

+0

不錯的心靈調試。 –

+0

@ muistooshort:地獄是的,不幸的是,我很難學會它:我的規格已經過去了,但是我的產品正在崩潰... – apneadiving

+0

我們是人類,我們只是學習困難的方式:) –

相關問題