Chcę, żeby coś takiego wyglądało ładnie:
>> 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">]
To nie działa:
>> 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\">]"
I to też nie jest:
>> 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"
Myśli?
ruby-on-rails
irb
Tom Lehman
źródło
źródło
YAML::ENGINE.yamler = 'syck'
..irbrc
innych narzędzi konsoli lub innych konfiguracji konsoli (np. bycie deweloperem zakontraktowanym z ograniczonym dostępem do kontenera / serwera produkcyjnego )Powinieneś spróbować hirb . To klejnot stworzony do ładnego formatowania obiektów w rubinowej konsoli. Twoja sesja skryptu / konsoli wyglądałaby następująco:
>> 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
Możesz dowiedzieć się więcej o hirb na jego stronie głównej .
źródło
Niesamowity wydruk jest również fajny, jeśli chcesz, aby obiekt był wcięty. Coś jak:
$ 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 } ]
Aby zintegrować go domyślnie z konsolą irb / rails / pry, dodaj do swojego pliku
~/.irbrc
lub~/.pryrc
:require "awesome_print" AwesomePrint.irb! # just in .irbrc AwesomePrint.pry! # just in .pryrc
źródło
>> puts ProductColor.all.to_yaml
Po prostu działa dobrze!
Źródło: https://stackoverflow.com/a/4830096
źródło
Można również zauważyć, że możesz użyć:
j ProductColor.all.inspect
do wyjścia w formacie Json, a nie Yaml
źródło
Cześć, możesz też spróbować tego w swoim skrypcie / konsoli, jeśli
>> y ProductColor.all
nie działa dla ciebie.
Spróbuj tego:
>> require 'yaml' >> YAML::ENGINE.yamler = 'syck'
następnie
>> y ProductColor.all
źródło
Miałem kłopoty, aby to działało, więc dodam moje dwa centy do awesome_print dodaj to do twojego Gemfile, najlepiej w
:development
gem 'awesome_print', require: 'ap'
potem w
rails console
możesz to zrobić
> ap Model.all
Otóż to. Możesz jednak dodaćrequire "awesome_print" AwesomePrint.irb!
do twojego ~ / .irbrc, w ten sposób awesome_print będzie wymagany za każdym razem, gdy otworzysz konsolę i możesz po prostu zrobić
Model. Wszystko bez konieczności wpisywania ap
źródło
Możesz również wypróbować poniższe dla grupy obiektów
Object.all.map(&:attributes).to_yaml
To da o wiele ładniejszy wynik, na przykład
--- id: 1 type: College name: University of Texas --- id: 2 type: College name: University of California
Powołanie
to_yaml
atrybutów, a nie samego obiektu, zapobiega wyświetlaniu pełnej zawartości obiektu w danych wyjściowychAlbo
puts Object.last.attributes.to_yaml
dla pojedynczego obiektuDostępna jest również wersja skrócona:
y Object.last.attributes
źródło
Myślę, że to rozwiązanie jest najbardziej trafne. Powinieneś spróbować tego:
puts JSON.pretty_generate Entry.all.map(&:attributes)
To da ci super ładne wyjście w porównaniu do formatu 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" } ]
źródło
Użyj
irbtools
klejnotu.Automatycznie sformatuje dane wyjściowe konsoli, a ponadto otrzymasz mnóstwo wspaniałych funkcji.
źródło
Możesz chcieć zdefiniować metodę inspect ProductColor, aby zwrócić coś, co uważasz za fajne. Na przykład:
def inspect "<#{id} - #{name} (#{internal_name})>" end
Następnie wynik ProductColor.all zostanie wyświetlony jako coś w rodzaju [<1 - White (White)>, ...]. Oczywiście powinieneś dostosować metodę inspekcji do swoich potrzeb, aby wyświetlała wszystkie potrzebne informacje w stylu, który lubisz.
Edycja: również jeśli problemem był brak podziałów wierszy na wyjściu, możesz spróbować
require 'pp' pp ProductColor.all
które powinny wstawiać podziały wierszy tam, gdzie to stosowne
źródło
require 'pp'
nie jest to możliwe wrails console --sandbox
. Z jakiegoś powodu dostaję,false
kiedy próbuję wymagaćpp
. Ups! wydaje się, żepp
jest to już wymagane domyślnie wrails console
. Właśnie to zrobiłempp Model.connection_handler
i otrzymałem duży, ładny wydruk. Dzięki.require
zwracafalse
, oznacza to po prostu, że plik został już załadowany.inspect
nie wyświetla się, gdy robisz tylkoProductColor.all
?Aby dodać do sugestii Alter Lago dotyczącej używania AwesomePrint, jeśli nie możesz / nie powinieneś / nie chcesz dodać klejnotu awesome_print do pliku Gemfile twojego projektu, zrób to:
gem install awesome_print
Edytuj ~ / .irb.rc i dodaj to:
$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'
(Oczywiście upewniając się, że ścieżka i wersja są poprawne)
źródło