nil:NilClass Rails 的未定义方法“split”
undefined method `split' for nil:NilClass Rails
我正在 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,然后 return 字符串 "AMS-00001",如果 Asset.count 不是 0 那么我将 last 分配给 Asset.last.asset_number 以提取序列中的最后一个数字。
我被绊倒的地方是将数字变量设置为 return 最后一个事件编号并对其调用 split 以提取数组的第二部分并转换为整数,以便我可以递增它.
当我从控制台 运行 执行此操作或尝试在视图中创建新记录时,出现以下错误:
undefined method
拆分为 nil:NilClass`
我确定我的语法不对,因为我更像是一个 Ruby Jr.
如果有人能帮助解释我需要做什么来重构并使这项工作正常进行,我将不胜感激。如果您需要更多信息或者我的问题不清楚,请告诉我。
undefined method split' for nil:NilClass`
错误是因为 last
变量的生命周期已在 if-else
循环中结束,而您正试图访问 last
外部 if-else
这一行中的循环 number = last.split('-')[1].to_i
。你需要像这样调整你的代码
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
我正在 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,然后 return 字符串 "AMS-00001",如果 Asset.count 不是 0 那么我将 last 分配给 Asset.last.asset_number 以提取序列中的最后一个数字。
我被绊倒的地方是将数字变量设置为 return 最后一个事件编号并对其调用 split 以提取数组的第二部分并转换为整数,以便我可以递增它.
当我从控制台 运行 执行此操作或尝试在视图中创建新记录时,出现以下错误:
undefined method
拆分为 nil:NilClass`
我确定我的语法不对,因为我更像是一个 Ruby Jr.
如果有人能帮助解释我需要做什么来重构并使这项工作正常进行,我将不胜感激。如果您需要更多信息或者我的问题不清楚,请告诉我。
undefined method split' for nil:NilClass`
错误是因为 last
变量的生命周期已在 if-else
循环中结束,而您正试图访问 last
外部 if-else
这一行中的循环 number = last.split('-')[1].to_i
。你需要像这样调整你的代码
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