Я получаю сообщение об ошибке no implicit conversion of String into Integer, которое поставило меня в тупик, и я не могу импортировать пользовательские записи и заполнить ими мою базу данных.
Пока у меня нет проблем с доступом к данным, но я получаю сообщение об ошибке со ссылкой на '[]' в строке с User.find... на ней.
Я использую следующий код:
require 'net/http'
require 'uri'
require 'json'
require 'faker'
#this script imports APR user data from the zendesk api and populates
the database with it.
uri = URI.parse("https://blahsupport.zendesk.com/api/v2/users.json")
request = Net::HTTP::Get.new(uri)
request.content_type = "application/json"
request.basic_auth("[email protected]", "blahpass")
req_options = {
use_ssl: uri.scheme == "https",
}
@response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(request)
end
puts @response.body
puts @response.message
puts @response.code
info = @response.body
info.force_encoding("utf-8")
File.write('blahusers1.json', info)
puts "File Created Successfully!"
file = File.read('blahusers1.json')
users = JSON.load(file)
users.each do |a|
User.find_or_create_by_zendesk_id(:zendesk_id => a['id'], :url => a['url'], :name => a['name'], :email => a['email'])
end
Есть идеи о том, как я получил эту ошибку? Спасибо за любую помощь!
**Редактировать
Ниже приведен пример возвращаемых данных.
{"users":[{"id":333653859,"url":"https://blahblah.zendesk.com/api/v2/users/333653859.json","name":"Randy Blah","email":"[email protected]","created_at":"2014-08-06T14:31:24Z","updated_at":"2018-04-04T14:22:06Z","time_zone":"Pacific Time (US & Canada)","phone":null,"shared_phone_number":null,"photo":{"url":"https://aprtechsupport.zendesk.com/api/v2/attachments/68955389.json","id":68955389,"file_name":"Work.jpg","content_url":"https://aprtechsupport.zendesk.com/system/photos/6895/5389/Work.jpg","mapped_content_url":"https://blahblah.zendesk.com/system/photos/6895/5389/Work.jpg","content_type":"image/jpeg","size":2528,"width":80,"height":80,"inline":false,"thumbnails":[{"url":"https://blahblah.zendesk.com/api/v2/attachments/68955399.json","id":68955399,"file_name":"Work_thumb.jpg","content_url":"https://blahblah.zendesk.com/system/photos/6895/5389/Work_thumb.jpg","mapped_content_url":"https://blahblah.zendesk.com/system/photos/6895/5389/Work_thumb.jpg","content_type":"image/jpeg","size":2522,"width":32,"height":32,"inline":false}]},"locale_id":1,"locale":"en-US","organization_id":null,"role":"admin","verified":true,"external_id":null,"tags":[],"alias":"","active":true,"shared":false,"shared_agent":false,"last_login_at":"2018-04-04T14:21:44Z","two_factor_auth_enabled":null,"signature":"Thanks for contacting the helpdesk!\n-Randy","details":"","notes":"","role_type":null,"custom_role_id":null,"moderator":true,"ticket_restriction":null,"only_private_comments":false,"restricted_agent":false,"suspended":false,"chat_only":false,"default_group_id":21692179,"user_fields":{}}
Пример представлен в Edit!
Посмотрите, поможет ли мой ответ вам решить / понять проблему.
Это решило проблему, большое вам спасибо!





В опубликованных вами примерах данных есть корневой объект users, содержащий массив пользовательских объектов. Итак, когда вы зацикливаете пользователей, использующих users.each, a на самом деле является Array, а не пользователем Hash, как вы ожидали.
Когда вы пытаетесь получить доступ к элементу Array с помощью индекса String, вы получаете исключение - no implicit conversion of String into Integer
Итак, попробуйте изменить
users = JSON.load(file)
к
users = JSON.load(file)['users']
чтобы он работал так, как вы ожидаете.
Спасибо галлюцинациям! Это была проблема, и это сработало. Я проголосовал за, но так как у меня меньше пятнадцати представителей, это не будет отображаться в посте.
Не волнуйтесь! Однако, когда у вас будет достаточно репутации, я был бы признателен, если бы вы проголосовали за мой ответ, поскольку он вам помог.
Я обязательно сделаю.
Приведите нам пример того, что представляет собой содержимое blahusers1.json (потому что предоставленный вами скрипт производит
{"error":"Couldn't authenticate you"}? И след ошибки тоже?