138 votes

Comment obtenir un formatage agréable dans la console Rails

Je veux obtenir quelque chose comme ça pour avoir l'air bien :

>> ProductColor.all
=> [#<ProductColor id: 1, name: "White", internal_name: "White", created_at: "2009-06-10 04:02:44", updated_at: "2009-06-10 04:02:44">, #<ProductColor id: 2, name: "Ivory", internal_name: "Ivory", created_at: "2009-06-10 04:02:44", updated_at: "2009-06-10 04:02:44">, #<ProductColor id: 3, name: "Blue", internal_name: "Light Blue", created_at: "2009-06-10 04:02:44", updated_at: "2009-06-10 04:02:44">, #<ProductColor id: 4, name: "Green", internal_name: "Green", created_at: "2009-06-10 04:02:44", updated_at: "2009-06-10 04:02:44">]

Ça ne marche pas :

>> ProductColor.all.inspect
=> "[#<ProductColor id: 1, name: \"White\", internal_name: \"White\", created_at: \"2009-06-10 04:02:44\", updated_at: \"2009-06-10 04:02:44\">, #<ProductColor id: 2, name: \"Ivory\", internal_name: \"Ivory\", created_at: \"2009-06-10 04:02:44\", updated_at: \"2009-06-10 04:02:44\">, #<ProductColor id: 3, name: \"Blue\", internal_name: \"Light Blue\", created_at: \"2009-06-10 04:02:44\", updated_at: \"2009-06-10 04:02:44\">, #<ProductColor id: 4, name: \"Green\", internal_name: \"Green\", created_at: \"2009-06-10 04:02:44\", updated_at: \"2009-06-10 04:02:44\">]"

Et ça non plus :

>> ProductColor.all.to_yaml
=> "--- \n- !ruby/object:ProductColor \n  attributes: \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  attributes_cache: {}\n\n- !ruby/object:ProductColor \n  attributes: \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  attributes_cache: {}\n\n- !ruby/object:ProductColor \n  attributes: \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  attributes_cache: {}\n\n- !ruby/object:ProductColor \n  attributes: \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  attributes_cache: {}\n\n"

Qu'en pensez-vous ?

261voto

ryanb Points 11043

El y est un moyen pratique d'obtenir une jolie sortie YAML.

y ProductColor.all

En supposant que vous êtes dans script/console

Comme l'a fait remarquer jordanpg, cette réponse est dépassée. Pour Rails 3.2+, vous devez exécuter le code suivant avant de pouvoir obtenir l'icône y pour fonctionner :

YAML::ENGINE.yamler = 'syck'

Desde ruby-docs

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

Pour rails 4/ruby 2, vous pouvez utiliser juste

puts object.to_yaml

5 votes

Cette réponse devrait être marquée comme étant la bonne puisqu'elle est intégrée, peut être utilisée immédiatement et, surtout, est simple.

15 votes

Cette réponse est périmée. Voir : stackoverflow.com/questions/11571801/ Pour que cela fonctionne, vous devez d'abord exécuter YAML::ENGINE.yamler = 'syck' .

5 votes

C'est maintenant YAML::ENGINE.yamler = 'psych'.

103voto

user83510 Points 3885

Vous devriez essayer hirb . C'est une gemme faite pour joliment formater les objets dans la console ruby. Votre session 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 savoir plus sur hirb à l'adresse suivante page d'accueil .

4 votes

La réponse de ryanb est en gros ce que je cherchais, mais c'est trop cool pour ne pas l'accepter.

8 votes

Bien qu'il ne s'agisse pas d'une réponse à la question d'origine, il peut être utile de signaler que vous pouvez ajouter le matériel hirb à votre ~/.irbrc afin de ne pas avoir à l'exiger et à l'activer à chaque fois.

1 votes

Ce joyau est maintenant dépassé.

34voto

Alter Lagos Points 1527

Impression impressionnante est également utile si vous voulez que l'objet soit indenté. Quelque chose comme :

$ rails console
rails> require "awesome_print"
rails> ap Account.all(:limit => 2)
[
    [0] #<Account:0x1033220b8> {
                     :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] #<Account:0x103321ff0> {
                     :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 fichier ~/.irbrc o ~/.pryrc fichier :

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

1 votes

Puis-je utiliser cette gemme avec Rails 4 ou 5 ? J'ai trouvé la note suivante dans la page github : NOTE : awesome_print v1.2.0 est la dernière version supportant les versions de Ruby antérieures à v1.9.3 et les versions de Rails antérieures à v3.0. La prochaine version awesome_print v2.0 nécessitera Ruby v1.9.3 ou plus et Rails v3.0 ou plus. Cela signifie-t-il que la gemme est obsolète avec ces versions et provoque des conflits ?

10voto

davidcollom Points 302

On peut également noter que vous pouvez utiliser :

j ProductColor.all.inspect

pour sortir au format Json plutôt que Yaml

0 votes

Cela peut échouer en fonction de la version de JSON/ruby, et le bon formatage peut être nécessaire dans un environnement où l'on ne peut pas avoir de bonnes choses.

3 votes

Cela soulève une erreur : JSON::GeneratorError : seule la génération d'objets ou de tableaux JSON est autorisée.

8voto

Allen Chun Points 634

Salut, vous pouvez également essayer ceci dans votre script/console si

>> y ProductColor.all

ne fonctionne pas pour vous.

Essayez ça :

>> require 'yaml'

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

puis

>> y ProductColor.all

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