Итерация по массиву в ruby - PullRequest
0 голосов
/ 17 января 2020

У меня есть массив с несколькими идентификаторами, как показано ниже. Я хочу l oop, чтобы получить индивидуальные значения. Я думал о чем-то вроде этого.

def letter(billing_ids)
 @billings = Billing.find(billings_ids.split(","))
 @billings.each do |bill|
  puts "#{bill}" 
 end
end

но я получаю сообщение об ошибке ActiveRecord :: RecordNotFound: Не удалось найти все Биллинги с 'id': ([66, 68]) (найдено 1 результатов, но искала 2)

ActiveRecord :: RecordNotFound: Не удалось найти счет-фактуру с 'id' = [47]

Я получаю приведенный ниже массив из этого запроса -

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
  end
  puts (billing_ids)
end

[66, 68]
[47]

Пожалуйста, помогите мне разобраться, как мне это сделать.

обновление

def letter(billing_ids)
 @billings = Billing.where(id: billings_ids.split(","))
 @billings.each do |bill|
  puts "#{bill}" 
 end
end

Обновление 2:

def letter(billing_ids)
 puts "#{billing_ids}"
end

вывод на терминал

 [66, 68]
 [47] 

Обновление 3

, используемое отладчиком, чтобы выяснить, что идет не так, и это то, что я могу найти, когда делаю

@billings = Billing.where(id: billing_ids) 
@billings.each do |bill| 
 byebug 
 puts bill.id
end

Исключение MethodError: неопределенный метод `each 'для" [66, 68] ": String

Ответы [ 3 ]

1 голос
/ 17 января 2020

Вам не нужно разделять. Ruby область действия принимает массив:

 @billings = Billing.where(id: billings_ids)
0 голосов
/ 17 января 2020

, пожалуйста, попробуйте это ... это будет работать

@billings = Billing.where(id: billing_ids) @billings.scan(/\d+/).map(&:to_i).each do |bill| byebug puts bill.id end

.scan(/\d+/).map(&:to_i) это преобразует строку в массив целых чисел

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

JSON .parse (billing_ids) .each {| банкнота | счет} решил мою проблему

...