1
votes

Comment appliquer "to_f" à une colonne pour tous les résultats dans une requête d'enregistrement actif dans la console rails

J'ai cette requête: p = Payment.where (: client_id => 1)

Alors seulement quelques champs, donc j'exécute ceci: p.select (: id,: created_at,: amount)

Le problème est que chaque montant du résultat est fourni sous forme de BigDecimal et n'est pas lisible. Je dois appliquer la fonction to_f dans la console des rails pour avoir un ensemble de résultats lisible.

J'ai essayé map , comme ceci: p.map {| p | p.amount.to_f} Mais il me renvoie un tableau uniquement avec les montants, et j'en ai besoin avec les autres attributs.


1 commentaires

Payment.where (: client_id => 1) .select ([: id,: created_at,: amount]). Map {| e | [e.id, e.created_at, e.amount.to_f]}


3 Réponses :


1
votes

Pour résoudre votre problème et obtenir tous les champs:

p.map { |i| [i.id, i.created_at, i.amount.to_f] }

Vous pouvez également jeter un œil sur ce article . Peut-être avez-vous juste besoin du type de flottant pour le champ montant dans votre base de données


0 commentaires

0
votes

si vous voulez toujours float du montant, vous pouvez définir le rappel after_find

class Payment < ActiveRecord::Base
  after_find do |payment|
    self.amount = self.amount.to_f
  end
end

il vous donnera toujours une valeur flottante lorsque vous trouvez objet

  • Il ne mettra pas à jour la valeur de votre base de données.

Veuillez regarder ce Rails Callback

p >


2 commentaires

Je dois le faire à l'intérieur de la console des rails. Cela semble beaucoup de code à mettre dans la console, par rapport à la solution https://stackoverflow.com/users/5954643/rajkumar-ulaganadhan . Merci quand même.


cela fonctionnera aussi sur votre console, je veux dire que vous obtiendrez le même résultat.



1
votes

Vous pouvez essayer comme ceci,

p.map { |item| { id: item.id, created_at: item.created_at, amount: item.amount.to_f}}


0 commentaires