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.
3 Réponses :
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
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
Veuillez regarder ce Rails Callback
p >
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.
Vous pouvez essayer comme ceci,
p.map { |item| { id: item.id, created_at: item.created_at, amount: item.amount.to_f}}
Payment.where (: client_id => 1) .select ([: id,: created_at,: amount]). Map {| e | [e.id, e.created_at, e.amount.to_f]}