Je veux que quelque chose comme ça ressemble à Nice:
>> 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">]
Cela ne fonctionne 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 cela 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"
Pensées?
La méthode 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 commenté jordanpg, cette réponse est obsolète. 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 Ruby, c'est-à-dire <= 1.9, Syck est toujours fourni, mais il a été complètement supprimé avec la sortie de Ruby 2.0.0.
Pour Rails 4/Ruby 2, vous pouvez utiliser simplement
puts object.to_yaml
Vous devriez essayer hirb . C'est un joyau conçu pour formater de jolis objets 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 savoir plus sur hirb sur son page d'accueil .
Impression géniale est bien aussi si vous voulez un objet en retrait. 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 => "[email protected]",
: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 => "[email protected]",
:background_info => nil
}
]
Pour l'intégrer par défaut à votre console irb/Rails/pry, ajoutez à votre ~/.irbrc
ou ~/.pryrc
fichier:
require "awesome_print"
AwesomePrint.irb! # just in .irbrc
AwesomePrint.pry! # just in .pryrc
>> puts ProductColor.all.to_yaml
Fonctionne tout simplement bien!
On peut également noter que vous pouvez utiliser:
j ProductColor.all.inspect
pour produire au format Json plutôt que Yaml
Salut, vous pouvez également essayer ceci dans votre script/console si
>> y ProductColor.all
ne fonctionne pas pour vous.
Essayez ceci:
>> require 'yaml'
>> YAML::ENGINE.yamler = 'syck'
alors
>> y ProductColor.all
J'ai eu quelques problèmes pour le faire fonctionner, alors je vais ajouter mes deux cents à awesome_print, ajoutez 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 ça. Cependant, vous pouvez également ajouter
require "awesome_print"
AwesomePrint.irb!
à votre ~/.irbrc, de cette façon, awesome_print sera requis à chaque fois que vous ouvrez la console et vous pouvez simplement faire
Model.all sans avoir besoin de taper ap
Utilisez irbtools
gem.
Il formatera automatiquement la sortie de la console et vous obtiendrez des tonnes de fonctionnalités intéressantes.
Vous souhaiterez peut-être définir la méthode d'inspection de ProductColor pour renvoyer quelque chose que vous trouverez 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 - Blanc (Blanc)>, ...]. Bien sûr, vous devez ajuster la méthode d'inspection à vos besoins, afin qu'elle affiche toutes les informations dont vous avez besoin dans un style que vous aimez.
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 ajouter à la suggestion d'Alter Lago d'utiliser AwesomePrint, si vous ne pouvez/ne devez pas/ne voulez pas ajouter la gemme awesome_print au 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'objets
Object.all.map(&:attributes).to_yaml
Cela vous donnera une sortie beaucoup plus agréable , comme
---
id: 1
type: College
name: University of Texas
---
id: 2
type: College
name: University of California
Appeler to_yaml
sur les attributs plutôt que sur l'objet lui-même vous évite de voir le contenu complet de l'objet dans la sortie
Ou puts Object.last.attributes.to_yaml
pour un seul objet
La sténographie est également disponible: y Object.last.attributes
Je pense que cette solution est la plus précise. Vous devriez essayer ceci:
puts JSON.pretty_generate Entry.all.map(&:attributes)
Cela vous donnera une sortie super sympa par rapport au format YAML:
[
{
"id": 44,
"team_id": null,
"member_id": 1000000,
"match_id": 1,
"created_at": "2019-04-09 15:53:14 +0900",
"updated_at": "2019-04-09 15:53:14 +0900"
},
{
"id": 45,
"team_id": null,
"member_id": 1000001,
"match_id": 1,
"created_at": "2019-04-09 15:53:36 +0900",
"updated_at": "2019-04-09 15:53:36 +0900"
},
{
"id": 46,
"team_id": null,
"member_id": 1000003,
"match_id": 1,
"created_at": "2019-04-09 15:56:40 +0900",
"updated_at": "2019-04-09 15:56:40 +0900"
},
{
"id": 47,
"team_id": null,
"member_id": 1000004,
"match_id": 1,
"created_at": "2019-04-09 15:56:48 +0900",
"updated_at": "2019-04-09 15:56:48 +0900"
}
]