nil的未定义方法`split':NilClass Rails

时间:2015-06-20 15:33:28

标签: ruby-on-rails ruby split

我正在Rails 4.2.2和Ruby 2.2.2中构建一个简单的资产管理器应用程序。在我的asset模型中,我使用before_create回调来调用函数generate_asset_number,如此

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 split'为nil:NilClass`

我确信我的语法已关闭,因为我更像是一个Ruby Jr.

如果有人可以帮助解释我需要做什么来重构和完成这项工作,我会很感激。如果您需要更多信息或我的问题不明确,请告诉我。

1 个答案:

答案 0 :(得分:3)

  

未定义的方法split'为nil:NilClass`

错误是因为last变量的生命周期已在if-else循环中结束,而您正试图访问last {{1}在这一行if-else中循环。你需要像这样调整你的代码

number = last.split('-')[1].to_i