Question

Je veux que quelque chose comme ça soit joli :

>> 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 ceci 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?

Était-ce utile?

La solution

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

y ProductColor.all

En supposant que vous soyez 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 obtenir le y méthode de travail :

YAML::ENGINE.yamler = 'syck'

Depuis Ruby-docs

Dans les anciennes versions de Ruby, c'est à dire.<= 1,9, le SYCK est toujours fourni, mais il a été complètement supprimé avec la libération de Ruby 2.0.0.

Pour les rails 4/ruby 2, vous pouvez utiliser simplement

puts object.to_yaml

Autres conseils

Vous devriez essayer hirb . C'est un petit bijou créé pour mettre en forme de jolis objets dans la console ruby. Votre script / session de console devrait ressembler à 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

Pour en savoir plus sur hirb, consultez sa page d'accueil .

Une impression géniale est également utile si vous souhaitez qu'un objet soit mis 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 => "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-le à votre fichier ~/.irbrc ou ~/.pryrc:

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

Vous pouvez également noter que vous pouvez utiliser:

j ProductColor.all.inspect

pour produire au format Json plutôt que Yaml

>> puts ProductColor.all.to_yaml

Tout simplement fonctionne bien!

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

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

>> y ProductColor.all

ne travaille pas pour vous.

Essayez ceci:

>> require 'yaml'

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

puis

<*>

J'ai eu quelques difficultés à le faire fonctionner, donc je vais ajouter mes deux sous à awesome_print ajoutez ceci à votre Gemfile, de préférence dans :development

gem 'awesome_print', require: 'ap'

puis dans

rails console

vous pouvez faire

> ap Model.all C'est tout. Cependant, vous pouvez aussi ajouter

require "awesome_print"
AwesomePrint.irb!

sur votre ~ / .irbrc, de cette façon, awesome_print sera requis à chaque fois que vous ouvrirez la console et que vous pourrez simplement le faire

.

Modèle.all sans avoir besoin de taper ap

Utilisez irbtools une gemme.

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

Vous pouvez définir la méthode d’inspection de ProductColor pour renvoyer un élément que vous trouvez intéressant. 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 adapter la méthode d’inspection à vos besoins afin qu’elle affiche toutes les informations dont vous avez besoin dans un style qui vous convient.

Modifier: même si le problème était le manque de sauts de ligne dans la sortie, essayez

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 pas / ne devriez pas / ne voulez pas ajouter la gem awesome_print au fichier Gemfile de votre projet, procédez comme suit:

gem install awesome_print

Éditez ~ / .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 beaucoup plus belle sortie, comme

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

Le fait d'appeler to_yaml sur des attributs plutôt que sur l'objet lui-même vous évite d'afficher 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 comparée 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"
  }
]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top