92 votes

Empêcher la console de rails d'imprimer l'objet à la fin d'une boucle

Si, par exemple, je passe en boucle toutes les instances d'un modèle donné et que je produis quelque chose pour chacune d'entre elles, à la fin, irb imprimera toujours l'objet entier.

Si l'objet finit par prendre des centaines de lignes, il faudra remonter très loin avant de voir ce que je cherchais vraiment. Y a-t-il un moyen de désactiver cela dans la console Rails ?

121voto

aef Points 1149

Si vous ne voulez pas désactiver l'écho en général, vous pouvez également appeler plusieurs expressions dans une ligne de commande. Seule la sortie de la dernière expression sera affichée.

big_result(input); 0

104voto

lulalala Points 3895

Appelez conf.echo = false et il n'imprimera pas la valeur de retour. Cela fonctionne pour n'importe quelle session irb, pas seulement pour la console Rails.

Si vous voulez le rendre permanent, ajoutez-le à votre configuration irb.

echo 'IRB.conf[:ECHO] = false' >> $HOME/.irbrc

46voto

Raja Varma Points 801

Pour empêcher temporairement la console d'imprimer les valeurs de retour, vous pouvez émettre une commande nil à la fin de votre boucle ou de votre fonction, mais avant d'appuyer sur la touche retour.

record.each do |r|
  puts r.properties
end; nil

Il peut également s'agir d'un nombre, si vous souhaitez réduire la saisie. Mais cela peut prêter à confusion dans certains scénarios, auxquels je ne peux pas penser.

record.each do |r|
  puts r.properties
end; 0

1voto

user5783745 Points 1214

Cela m'a beaucoup frustré, parce que j'utilisais pry-rails gem, certaines solutions ne fonctionneraient pas pour moi.

Voici donc ce qui a fonctionné en 2 étapes :

  1. Il suffit d'ajouter ; à la fin de la toute dernière commande sera suffisante pour empêcher l'impression de la sortie.
  2. Il se peut qu'il imprime quand même le sql qui a été exécuté. Pour le faire taire, il faut donc l'entourer de

    ActiveRecord::Base.logger.silence do

    code here

    end

Exemple

Si vous voulez exécuter cette

User.all do |user|
  puts user.first_name
end

alors cela garantira que rien d'autre ne sera imprimé à l'écran :

ActiveRecord::Base.logger.silence do
  User.all do |user|
    puts user.first_name
  end
end;

(n'oubliez pas le ; à la toute fin)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X