首页 > 解决方案 > '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 吗?不正确?

标签: ruby

解决方案


正如@razvans 指出的那样,这里的错误信息很棒。

错误

您正在使用 初始化对象input_file_path: nil,然后在内部call检查@input_file_pathinput_file_path在初始化程序中设置为 AKA nil)是否字符串结尾。

上没有.end_with?方法nil。这就是导致NoMethodError错误的原因。

解决方案

nil你可以在你的调用中提防end_with?,或者在初始化器中给它一个默认值。


推荐阅读