ruby-on-rails - 将字符串转换为 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
没有问题。
解决方案
返回的 JSON 中有超过 600 个元素没有end_date
或start_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
推荐阅读
- r - 计算基于一年的百分比减少
- c++ - C++ 异常套接字行为
- ios - Tableview,如何禁用可重用单元?(用于测试目的)
- jestjs - Jest 和 RANDOMBYTESREQUEST 打开句柄
- javascript - 单击该元素时如何使用javascript获取HTML集合中元素的索引
- java - 在 RxJava 中创建一个观察者来执行每个时间间隔的操作
- firebase - Firebase - 禁用默认电子邮件操作 URL
- php - 查询不返回结果
- python - 如何解决python中的这个属性错误?
- swift - 访问和操作 EnvironmentObject 中的数组项