首页 > 解决方案 > 将字符串转换为 DateTime 在控制台中有效,但在请求中无效(Rails)?

问题描述

我正在从 API 构建一个包装器,如果我使用 将字符串转换为 datetime DateTime.parse(),则它在检查控制台时工作正常,但在控制器方法索引请求中却没有。我得到经典的“没有将 nil 隐式转换为字符串日期时间”错误。

这是我的代码:

class SodaApi < ApplicationRecord
  include HTTParty 

  def self.opportunities_api 
    client = SODA::Client.new({:domain => "data.cityofnewyork.us", :app_token => "<my api key>"})
    response = HTTParty.get("https://data.cityofnewyork.us/resource/n4ac-3636.json") 
      result = response.map do |r| 
      created_date = DateTime.parse(r['created_date'])
      end_date = DateTime.parse(r['end_date'])

      ### I build my wrapper here ###
    end
  end 
end

rails c,使用byebug,我能够创建一个变量created_date并从字符串转换为Datetime没有问题。

标签: ruby-on-railsrubystringdatetimetypes

解决方案


返回的 JSON 中有超过 600 个元素没有end_datestart_date

response = HTTParty.get("https://data.cityofnewyork.us/resource/n4ac-3636.json")
response.find_all{|r| r['start_date'].nil? }.count
# => 665
response.find_all{|r| r['end_date'].nil? }.count
# => 665

您需要处理这些情况,例如通过设置默认值或在这种情况下不解析日期:

  def parse_date(string)
     return nil unless string
     DateTime.parse(string)
  end

  result = response.map do |r| 
    created_date = parse_date(r['created_date'])
    end_date = parse_date(r['end_date'])
    # ...
  end

推荐阅读