0
votes

TypeError: pas de conversion implicite de String en Integer dans ruby

J'exécute cette requête et sur met , j'obtiens une erreur TypeError: pas de conversion implicite de String en Integer si j'essaie simplement d'obtenir l'ID du tableau .

met billing_ids puis le résultat est []

Et si je le fais, met" # {billing_ids ["id"]} " strong> pour obtenir juste l'ID, puis j'obtiens l'erreur TypeError: pas de conversion implicite de String en Integer

S'il vous plaît, aidez-moi à comprendre comment puis-je obtenir l'ID.

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

Sortie

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


5 commentaires

pouvez-vous simplement faire met billing_ids et publier le résultat ici


Sortie @gautam ajoutée


Que veux tu accomplir ? imprimer tous les identifiants de facturation dans une chaîne?


pouvez-vous même utiliser des "insids"? après ", je pense qu'une citation doit être utilisée? Regardez une erreur de syntaxe?


@Navroop Vous devriez faire billing_ids.map (&: id) car votre tableau billing_ids contient des objets et pas seulement des identifiants


3 Réponses :


0
votes

Vous initialisez billing_ids en tant que tableau vide, puis vous y insérez un ID de modèle de facturation (un entier). Si vous faites billing_ids.first, vous obtiendrez alors l'ID que vous récupérez: issue.billings.where ("billings.date .

Alors essayez met "# {billing_ids.first}" . Cela devrait obtenir votre identifiant.

Remarque: l'opérateur << ajoute - pousse l'objet donné à la fin du tableau, et puisque vous insérez un ID, pas un modèle de facturation dans billing_ids, vous ne pouvez pas accéder au modèle propriété ['ID'] d'un ID.


0 commentaires

2
votes

On dirait que vous essayez d'imprimer les identifiants des objets qui sont dans un tableau.

Essayez ceci: met "{billing_ids.map (&: id)}"

À propos de l'erreur TypeError: pas de conversion implicite de String en Integer

L'erreur est due au fait que vous tentez d'accéder à un index "id" d'un tableau d'objets de facturation. L'attribut id d'un objet particulier peut être obtenu mais si vous essayez d'accéder à id du tableau, cela ne fonctionnera pas. (Notez que billing_ids est un tableau selon votre code). Le tableau est accessible par des indices qui sont des entiers (contrairement à Hash )


0 commentaires

0
votes

vous devez modifier billing_ids << issue.billings.where ("billings.date cette ligne en billing_ids << issue.billings.where ("billings.date OU billing_ids << problème .billings.where ("billings.date


0 commentaires