ruby - 'end_with?' 的正确用法?
问题描述
我正在尝试使用 .xlsx 文件格式收集本地目录中的所有文件并将它们拉入我的 AWS S3 存储桶,但是,我这样做的方法
attr_reader :bucket, :object_key, :input_file_path
def initialize(bucket:, object_key:, input_file_path:)
@bucket = bucket
@object_key = object_key
@input_file_path = input_file_path
end
def call
return unless input_file_path.end_with?(".xslx")
object = s3_resource.bucket(bucket).object(object_key)
object.upload_file(input_file_path)
end
还给我
[5] pry(main)> Accounting::Datev::Utils::ExcelUtil.new(bucket: nil, object_key:nil, input_file_path: nil).call
NoMethodError: undefined method `end_with?' for nil:NilClass
我在使用end_with 吗?不正确?
解决方案
正如@razvans 指出的那样,这里的错误信息很棒。
错误
您正在使用 初始化对象input_file_path: nil
,然后在内部call
检查@input_file_path
(input_file_path
在初始化程序中设置为 AKA nil
)是否以字符串结尾。
上没有.end_with?
方法nil
。这就是导致NoMethodError
错误的原因。
解决方案
nil
你可以在你的调用中提防end_with?
,或者在初始化器中给它一个默认值。
推荐阅读
- php - 如何从mysql中检索pdf并使用php显示
- c - 为什么必须在同一个翻译单元中定义回调函数才能正确链接?
- html - 如何引用其他文件夹?
- powershell - Call Rest API inside powershell function
- angular - 数据表在角度 html 视图中无法正常工作
- c - 我是否成功释放了动态分配的内存?
- r - 如何使用 stan_glm 从以前的研究中定义信息先验?
- debugging - 如何在 SAP 中调试 DMEE 退出事件
- java - 实现接口的类不能使用自己在 Equals 中插入 Object
- symfony - ApiPlatform - 订单过滤器中的重复 id 字段