Comment obtenir un bon formatage dans la console Rails

Je veux avoir quelque chose comme ça

>> ProductColor.all => [#, #, #, #] 

Cela ne fonctionne pas:

 >> ProductColor.all.inspect => "[#, #, #, #]" 

Et cela non plus:

 >> ProductColor.all.to_yaml => "--- \n- !ruby/object:ProductColor \n atsortingbutes: \n name: White\n created_at: 2009-06-10 04:02:44\n updated_at: 2009-06-10 04:02:44\n id: \"1\"\n internal_name: White\n atsortingbutes_cache: {}\n\n- !ruby/object:ProductColor \n atsortingbutes: \n name: Ivory\n created_at: 2009-06-10 04:02:44\n updated_at: 2009-06-10 04:02:44\n id: \"2\"\n internal_name: Ivory\n atsortingbutes_cache: {}\n\n- !ruby/object:ProductColor \n atsortingbutes: \n name: Blue\n created_at: 2009-06-10 04:02:44\n updated_at: 2009-06-10 04:02:44\n id: \"3\"\n internal_name: Light Blue\n atsortingbutes_cache: {}\n\n- !ruby/object:ProductColor \n atsortingbutes: \n name: Green\n created_at: 2009-06-10 04:02:44\n updated_at: 2009-06-10 04:02:44\n id: \"4\"\n internal_name: Green\n atsortingbutes_cache: {}\n\n" 

Pensées?

La méthode y est un moyen pratique d’obtenir une jolie sortie YAML.

 y ProductColor.all 

En supposant que vous êtes en script/console

Comme l’a dit jordanpg, cette réponse est dépassée. Pour Rails 3.2+, vous devez exécuter le code suivant avant de pouvoir utiliser la méthode y :

 YAML::ENGINE.yamler = 'syck' 

De ruby-docs

Dans les anciennes versions de Ruby, c.-à-d. <= 1.9, Syck est toujours fourni, mais il a été complètement supprimé avec la sortie de Ruby 2.0.0.

Pour les rails 4 / ruby ​​2, vous pouvez utiliser juste

 puts object.to_yaml 

Vous devriez essayer hirb . C’est un bijou conçu pour mettre en forme les objects dans la console Ruby. Votre session de script / console ressemblerait à ceci:

 >> require 'hirb' => true >> Hirb.enable => true >> ProductColor.first +----+-------+---------------+---------------------+---------------------+ | id | name | internal_name | created_at | updated_at | +----+-------+---------------+---------------------+---------------------+ | 1 | White | White | 2009-06-10 04:02:44 | 2009-06-10 04:02:44 | +----+-------+---------------+---------------------+---------------------+ 1 row in set => true 

Vous pouvez en apprendre plus sur hirb sur sa page d’accueil .

L’impression géniale est bien aussi si vous voulez un object en retrait. Quelque chose comme:

 $ rails console rails> require "awesome_print" rails> ap Account.all(:limit => 2) [ [0] # { :id => 1, :user_id => 5, :assigned_to => 7, :name => "Hayes-DuBuque", :access => "Public", :website => "http://www.hayesdubuque.com", :toll_free_phone => "1-800-932-6571", :phone => "(111)549-5002", :fax => "(349)415-2266", :deleted_at => nil, :created_at => Sat, 06 Mar 2010 09:46:10 UTC +00:00, :updated_at => Sat, 06 Mar 2010 16:33:10 UTC +00:00, :email => "info@hayesdubuque.com", :background_info => nil }, [1] # { :id => 2, :user_id => 4, :assigned_to => 4, :name => "Ziemann-Streich", :access => "Public", :website => "http://www.ziemannstreich.com", :toll_free_phone => "1-800-871-0619", :phone => "(042)056-1534", :fax => "(106)017-8792", :deleted_at => nil, :created_at => Tue, 09 Feb 2010 13:32:10 UTC +00:00, :updated_at => Tue, 09 Feb 2010 20:05:01 UTC +00:00, :email => "info@ziemannstreich.com", :background_info => nil } ] 

Pour l’intégrer par défaut à votre console irb / rails / pry, ajoutez à votre ~/.irbrc ou ~/.pryrc :

 require "awesome_print" AwesomePrint.irb! # just in .irbrc AwesomePrint.pry! # just in .pryrc 

Peut également être noté que vous pouvez utiliser:

 j ProductColor.all.inspect 

pour sortir au format Json plutôt que Yaml

 >> puts ProductColor.all.to_yaml 

Fonctionne bien!

Source: https://stackoverflow.com/a/4830096

Bonjour, vous pouvez aussi essayer ceci dans votre script / console si

 >> y ProductColor.all 

ne travaille pas pour vous

Essaye ça:

 >> require 'yaml' >> YAML::ENGINE.yamler = 'syck' 

puis

 >> y ProductColor.all 

Utilisez irbtools gem.

Il formatera automatiquement la sortie de la console et vous obtiendrez des tonnes de fonctionnalités géniales.

J’ai eu quelques problèmes pour que cela fonctionne, alors je vais append mes deux cents à awesome_print append ceci à votre Gemfile, de préférence dans :development

gem 'awesome_print', require: 'ap'

puis dans

rails console

tu peux faire

> ap Model.all C’est tout. Cependant, vous pouvez également append

 require "awesome_print" AwesomePrint.irb! 

à votre ~ / .irbrc, de cette façon awesome_print sera nécessaire chaque fois que vous ouvrez la console et vous pouvez simplement faire

Model.all sans avoir besoin de taper ap

Vous voudrez peut-être définir la méthode d’inspection de ProductColor pour renvoyer quelque chose que vous trouvez agréable. Par exemple:

 def inspect "<#{id} - #{name} (#{internal_name})>" end 

Après quoi le résultat de ProductColor.all s’affichera comme quelque chose comme [<1 - White (White)>, …]. Bien entendu, vous devez adapter la méthode d’inspection à vos besoins afin qu’elle affiche toutes les informations dont vous avez besoin dans un style qui vous plait.

Edit: aussi si le problème était le manque de sauts de ligne dans la sortie, vous pourriez essayer

 require 'pp' pp ProductColor.all 

qui devrait insérer des sauts de ligne le cas échéant

Pour append à la suggestion d’Alter Lago d’utiliser AwesomePrint, si vous ne pouvez / ne devez pas / ne voulez pas append le joyau awesome_print au fichier Gemfile de votre projet, procédez comme suit:

gem install awesome_print

Modifiez ~ / .irb.rc et ajoutez ceci:

$LOAD_PATH << '/Users/your-user/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/awesome_print-1.1.0/lib'

require 'awesome_print'

(S'assurer que le chemin et la version sont corrects, bien sûr)

Vous pouvez également essayer ce qui suit pour un groupe d’objects

 Object.all.map(&:atsortingbutes).to_yaml 

Cela vous donnera beaucoup plus de rendement, comme

 --- id: 1 type: College name: University of Texas --- id: 2 type: College name: University of California 

L’appel à to_yaml sur les atsortingbuts plutôt que sur l’object lui-même vous évite de voir le contenu complet de l’object dans la sortie

Ou puts Object.last.atsortingbutes.to_yaml pour un seul object

Un raccourci est également disponible: y Object.last.atsortingbutes