Wie schön Formatierung in der Rails-Konsole erhalten
-
22-07-2019 - |
Frage
Ich mag so etwas bekommen, um schön aussehen:
>> 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">]
Das 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 folgt aus:
>> 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"
Die Gedanken?
Lösung
Die y
Methode ist eine praktische Möglichkeit, ein paar ziemlich YAML Ausgabe zu erhalten.
y ProductColor.all
Angenommen, Sie in script/console
sind
Wie jordanpg kommentiert, diese Antwort ist veraltet. Für Rails 3.2+ müssen Sie den folgenden Code ausführen, bevor Sie die y
Methode bekommen zu arbeiten:
YAML::ENGINE.yamler = 'syck'
Bei älteren Versionen von Ruby, das heißt. <= 1,9, wird Syck noch vorgesehen, es jedoch vollständig mit der Veröffentlichung von Ruby 2.0.0 entfernt wurde.
Für Schienen 4 / Rubin 2 könnte man verwenden nur
puts object.to_yaml
Andere Tipps
Sie sollten versuchen, hirb . Es ist ein Juwel gemacht zu ziemlich Format Objekte in der Ruby-Konsole. Ihre 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 können mehr über hirb lernen an seinem Homepage .
ehrfürchtiger Druck schön ist auch, wenn Sie ein Objekt eingerückt werden sollen. So 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 => "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
}
]
Um es zu integrieren standardmäßig mit irb / rails / hebeln Konsole, fügen Sie Ihren ~/.irbrc
oder ~/.pryrc
-Datei:
require "awesome_print"
AwesomePrint.irb! # just in .irbrc
AwesomePrint.pry! # just in .pryrc
Auch sei darauf hingewiesen, dass Sie verwenden können:
j ProductColor.all.inspect
zur Ausgabe im JSON-Format statt Yaml
>> puts ProductColor.all.to_yaml
Sie einfach funktioniert!
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'
und
>> y ProductColor.all
hatte ich einige Probleme damit es funktioniert, damit ich meine zwei Cent in den awesome_print
fügen Sie diese zu Ihrer Gemfile, vorzugsweise in :development
gem 'awesome_print', require: 'ap'
dann in
rails console
Sie tun können,
> ap Model.all
Das ist es. Sie können aber auch hinzufügen
require "awesome_print"
AwesomePrint.irb!
Ihren ~ / .irbrc, auf diese Weise awesome_print wird zu jeder Zeit erforderlich sein, die Konsole öffnen und Sie können einfach tun
Model.all ohne die Notwendigkeit der Eingabe ap
Mit irbtools
gem.
Es wird die die Konsolenausgabe automatisch formatiert und Sie werden Tonnen von tollen Funktionen erhalten.
Sie möchten vielleicht ProductColor des inspizieren Methode zu definieren, etwas zurückzugeben, die Sie schön finden. Zum Beispiel:
def inspect
"<#{id} - #{name} (#{internal_name})>"
end
Nach dem das Ergebnis der ProductColor.all wird als etwas zeigen, wie [<1 - Weiß (weiß)>, ...]. Natürlich sollten Sie das überprüfen Methode an Ihre Bedürfnisse anpassen, so dass es alle Informationen anzeigt, die Sie in einer Art benötigen, die Sie mögen.
Edit: auch wenn das Problem der fehlenden Zeilenumbrüche in der Ausgabe war, könnte man versuchen
require 'pp'
pp ProductColor.all
, welche sollten Zeilenumbrüche einfügen gegebenenfalls
So fügt Lago Vorschlag Altem 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
Bearbeiten ~ / .irb.rc und fügen Sie diese:
$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)
Sie können auch die folgenden für eine Gruppe von Objekten versuchen
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
aufrufen to_yaml
auf Attribute, anstatt das Objekt selbst erspart Ihnen den gesamten Inhalt des Objekts in der Ausgabe sehen
oder puts Object.last.attributes.to_yaml
für ein einzelnes Objekt
Stenografie ist auch verfügbar: y Object.last.attributes
Ich denke, diese Lösung die genaueste ist. Sie sollten versuchen, diese:
puts JSON.pretty_generate Entry.all.map(&:attributes)
Dies wird Ihnen eine super schöne Ausgabe vergleichen zu YAML Format:
[
{
"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"
}
]