2015-06-20 54 views
0

我正在Rails 4.2.2和Ruby 2.2.2中構建一個簡單的資產管理器應用程序。在我asset模型我使用一個回調與before_create調用一個函數generate_asset_number像這樣未定義的方法`拆分'爲零:NilClass Rails

def generate_asset_number 
     company = "AMS" 
     if Asset.count == 0 
     self.asset_number = "#{company}-00001" 
     else 
     last = Asset.last.asset_number 
     end 
     number = last.split('-')[1].to_i 
     number += 1 
     self.asset_number = company + '-' + "%05d" % number 
     end 
    end 

正如你可以看到我設置公司變量作爲字符串,評估如果Asset.count爲0,那麼返回字符串「AMS-00001」,如果Asset.count不是0,那麼我將最後一個賦值給Asset.last.asset_number以獲取序列中的最後一個數字。

在哪裏我得到了絆倒是設置數字變量返回最後的事件號碼和調用分裂它提取數組的第二部分,並轉換爲整數,所以我可以增加它。

當我運行這個從控制檯或嘗試在視圖中創建一個新的記錄,我得到以下錯誤:

undefined method分裂」的零:NilClass`

我敢肯定,我的語法因爲我更像是一個Ruby Jr.

如果有人可以幫助解釋我需要做什麼來重構並完成這項工作,我會很感激。如果您需要更多信息或者如果我的問題不清楚,請告訴我。

回答

3

undefined method split' for nil:NilClass`

這個錯誤是因爲last變量的生命在if-else循環已結束,您試圖訪問last在此行number = last.split('-')[1].to_iif-else循環。你需要像這樣調整你的代碼

def generate_asset_number 
    company = "AMS" 
    if Asset.count == 0 
    self.asset_number = "#{company}-00001" 
    else 
    last = Asset.last.asset_number 
    number = last.split('-')[1].to_i 
    number += 1 
    self.asset_number = company + '-' + "%05d" % number 
    end 
end 
+1

這很好,對不起,這對我來說很早,我犯了新錯誤。我在過渡期間重構了類似於您的答案的東西,但它使用了額外的if語句。所以這更清潔!非常感謝<3 – nulltek

相關問題