2009-08-03 4 views
105

Ich möchte bekommen, so etwas bekommen schön aussehen:Wie schön Formatierung in der Rails-Konsole

>> 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">] 

Dies funktioniert nicht:

>> 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\">]" 

Und ebenso wenig wie diese:

>> 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" 

Gedanken?

Antwort

231

Die y Methode ist eine praktische Möglichkeit, einige zu bekommen einsetzen sollte hübsche YAML-Ausgabe.

y ProductColor.all 

Sie Unter der Annahme sind in script/console

Als jordanpg kommentierte diese Antwort veraltet ist. Für Rails 3.2+ Sie den folgenden Code ausführen müssen, bevor Sie die y Methode arbeiten kann:

YAML::ENGINE.yamler = 'syck' 

Von ruby-docs

In older Ruby versions, ie. <= 1.9, Syck is still provided, however it was completely removed with the release of Ruby 2.0.0.

für Schienen 4/Rubin 2

könnten Sie einfach

verwenden
puts object.to_yaml 
+5

Dies sollte als die richtige Antwort markiert werden, da es eingebaut ist, kann sofort verwendet werden, und vor allem, einfach. – botbot

+2

@masterkrang - ich stimme zu! –

+15

Diese Antwort ist veraltet. Siehe: http://stackoverflow.com/questions/11571801/rails-console-y-helper-returns-nameerror-rather-than-yaml-formatting-output Um dies zu ermöglichen, müssen Sie zuerst YAML :: ENGINE ausführen .yamler = "syck". – jordanpg

4

Vielleicht möchten Sie die inspect-Methode von ProductColor definieren, um etwas zurückzugeben, das Ihnen gefällt. Zum Beispiel:

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

Nach dem das Ergebnis der ProductColor.all wird als so etwas wie angezeigt [< 1 - Weiß (weiß)>, ...]. Natürlich sollten Sie die inspect-Methode an Ihre Bedürfnisse anpassen, so dass sie alle benötigten Informationen in einem Stil anzeigt, den Sie mögen.

Edit: auch wenn das Problem der fehlenden Zeilenumbrüche in der Ausgabe war, könnten Sie versuchen

require 'pp' 
pp ProductColor.all 

die Zeilenumbrüche gegebenenfalls

+0

Dank war ich für pp – GiH

+0

als eine Angelegenheit der Tatsache suchen 'require‚pp'' in 'Schienen Konsole nicht möglich ist - "Sandkasten". Aus irgendeinem Grund bekomme ich "falsch", wenn ich versuche, "pp" zu verlangen. Hoppla! es scheint, dass 'pp' bereits standardmäßig in' rails console' benötigt wird. Ich habe 'pp Model.connection_handler' gemacht und eine große, hübsche Ausgabe bekommen. Vielen Dank. – Green

+0

@Green Wenn 'require'' false' zurückgibt, bedeutet das nur, dass die Datei bereits geladen wurde. – sepp2k

88

Sie sollten versuchen, hirb. Es ist ein Juwel, um Objekte in der Ruby-Konsole zu formatieren. Ihr Skript/Konsolensitzung würde wie folgt aussehen:

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

Sie mehr über hirb an seinem homepage lernen können.

+2

Ryanbs Antwort ist im Grunde das, wonach ich gesucht habe, aber dieses ist zu cool, um nicht zu akzeptieren. –

+7

Obwohl es keine Antwort auf die ursprüngliche Frage gibt, könnte es darauf hindeuten, dass Sie das hirb-Zeug zu Ihrer ~/.irbrc hinzufügen können, so dass Sie es nicht jedes Mal anfordern und aktivieren müssen. – jordelver

+1

Dieses Juwel ist jetzt veraltet. –

10

auch sei darauf hingewiesen, dass Sie verwenden können:

j ProductColor.all.inspect 

zur Ausgabe im JSON-Format statt Yaml schön

+0

kann dies je nach Version von JSON/Ruby fehlschlagen , und die nette Formatierung kann in einer Umgebung benötigt werden, in der man keine schönen Dinge haben kann – Todd

+2

Dieser Raise Fehler: JSON :: GeneratorError: nur Generierung von JSON Objekten oder Arrays erlaubt –

18

Awesome print ist auch, wenn Sie ein Objekt eingerückt werden soll.Etwas wie:

$ 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 
    } 
] 

es zu integrieren standardmäßig mit irb/rails/hebeln Konsole, fügen Sie Ihre ~/.irbrc oder ~/.pryrc Datei:

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

Kann ich dieses Juwel mit Rails 4 oder 5 benutzen? Ich habe den folgenden Hinweis in der github-Seite gefunden: HINWEIS: awesome_print v1.2.0 ist das letzte Release, das Ruby-Versionen vor Version 1.9.3 und Rails-Versionen vor Version 3.0 unterstützt. Der kommende awesome_print v2.0 benötigt Ruby v1.9.3 oder neuer und Rails v3.0 oder neuer. Heißt das, dass der Edelstein mit diesen Versionen veraltet ist und Konflikte verursacht ?? – Lykos

3

hinzufügen Lago Vorschlag zu ändern Fehlt AwesomePrint für die Verwendung, wenn Sie nicht/nicht/nicht das awesome_print Juwel Ihres Projekts Gemfile hinzufügen möchten, dies tun:

gem install awesome_print

Diese

Bearbeiten ~/.irb.rc und fügt:

$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'

(Sicherstellen, dass der Pfad und die Version korrekt ist, natürlich)

5

Verwenden irbtools gem.

Es wird automatisch die Konsolenausgabe formatieren und Sie werden Tonnen von tollen Funktionen erhalten.

+0

Schön! Aber ich kann ActiveResource Inhalte nicht formatieren ... es sei denn, ich mache etwas falsches – Crimbo

8

Hallo können Sie auch versuchen, diese in Ihrem Skript/Konsole, wenn

>> y ProductColor.all 

nicht für Sie arbeiten.

Versuchen Sie folgendes:

>> require 'yaml' 

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

dann

>> y ProductColor.all 
9
>> puts ProductColor.all.to_yaml 

einfach funktioniert!

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

+0

Das funktioniert super! Ich konnte die anderen oben gewählten Antworten nicht zur Arbeit bringen ... Ich schätze, weil ich ActiveResource (API-Ressourcen) verwende – Crimbo

5

ich einige Probleme hatte es so, dass Arbeit werde ich meine zwei Cent fügen Sie diese zu Ihrer Gemfile awesome_print hinzufügen, vorzugsweise in :development

gem 'awesome_print', require: 'ap'

dann in

rails console

können Sie tun

> ap Model.all Das ist es. Sie können aber auch

require "awesome_print" 
AwesomePrint.irb! 

zu Ihrem ~/.irbrc hinzufügen, wird auf diese Weise awesome_print jederzeit erforderlich Sie die Konsole öffnen und Sie können einfach tun

Modell.alle ohne die Notwendigkeit der Eingabe ap

3

Sie können auch die folgenden für eine Gruppe von Objekten

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

Dies wird Ihnen viel schöner Ausgang, wie

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

Berufung versuchen to_yaml auf Attribute und nicht das Objekt selbst speichert Sie von der Anzeige des gesamten Inhalts des Objekts in der Ausgabe

Oder puts Object.last.attributes.to_yaml für ein einzelnes Objekt

Stenografie ist ebenfalls verfügbar: y Object.last.attributes