Ошибка типа: неявное преобразование строки в целое число в ruby - PullRequest
0 голосов
/ 16 января 2020

Я выполняю этот запрос и на ставит Я получаю ошибку Ошибка типа: нет неявного преобразования строки в целое число , если я просто пытаюсь получить идентификатор из массива.

помещает billing_ids , тогда вывод будет [<Billing id: 66, date: "2019-11-31", created_at: "2019-04-22 22:28:23", updated_at: "2020-01-15 17:03:05">]

А если я сделаю , то получим "# {billing_ids [" id "]}" , чтобы получить только идентификатор, тогда я получаю сообщение об ошибке TypeError: нет неявного преобразования строки в целое число

Пожалуйста, помогите мне выяснить, как я могу получить идентификатор.

Office.all.each do |office|
  billing_ids=[] #initialize array
  office.issues.where("issues.amount > 0").each do |issue|
    billing_ids << issue.billings.where("billings.date < ?", Message.last.date).order(:date).last.id #add id to array
  end
  puts "#{billing_ids["id"]}"
end

Выход

[#<Billing id: 66, date: "2019-11-31", created_at: "2019-04-22 22:28:23", updated_at: "2020-01-15 17:03:05">]

Ответы [ 3 ]

2 голосов
/ 16 января 2020

Похоже, вы пытаетесь распечатать идентификаторы объектов, которые находятся в массиве.

Попробуйте это: puts "{billing_ids.map(&:id)}"

Об ошибке Ошибка типа: неявное преобразование строки в целое число

Ошибка в том, что вы пытаетесь получить доступ к индексу "id" Array объектов биллинга. Атрибут id определенного объекта можно получить, но если вы попытаетесь получить доступ к id массива, это не сработает. (Примечание billing_ids является массивом в соответствии с вашим кодом). Массив может быть доступен с помощью целых индексов (в отличие от Hash)

0 голосов
/ 16 января 2020

вам нужно изменить billing_ids << issue.billings.where("billings.date < ?", Message.last.date).order(:date).last.id эту строку на billing_ids << issue.billings.where("billings.date < ?", Message.last.date).order(:date).last.billing.id ИЛИ billing_ids << issue.billings.where("billings.date < ?", Message.last.date).order(:date).last.pluck(:id)

0 голосов
/ 16 января 2020

Вы инициализируете billing_ids как пустой массив и затем вставляете в него идентификатор модели биллинга (int). Если вы выполните billing_ids.first, вы получите идентификатор, который вы выбираете: issue.billings.where("billings.date < ?", Message.last.date).order(:date).last.id.

Так что попробуйте puts "#{billing_ids.first}". Это должно получить ваш ID.

Примечание: оператор << добавляет - помещает данный объект в конец массива, и, поскольку вы помещаете идентификатор, а не модель биллинга в billing_ids, вы не можете получить доступ к свойству модели ['ID'] идентификатора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...