Как получить хорошее форматирование в консоли Rails
Я хочу, чтобы что-то вроде этого выглядело красиво:
>> 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">]
Это не работает:
>> 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">]"
и так:
>> ProductColor.all.to_yaml
=> "--- n- !ruby/object:ProductColor n attributes: n name: Whiten created_at: 2009-06-10 04:02:44n updated_at: 2009-06-10 04:02:44n id: "1"n internal_name: Whiten attributes_cache: {}nn- !ruby/object:ProductColor n attributes: n name: Ivoryn created_at: 2009-06-10 04:02:44n updated_at: 2009-06-10 04:02:44n id: "2"n internal_name: Ivoryn attributes_cache: {}nn- !ruby/object:ProductColor n attributes: n name: Bluen created_at: 2009-06-10 04:02:44n updated_at: 2009-06-10 04:02:44n id: "3"n internal_name: Light Bluen attributes_cache: {}nn- !ruby/object:ProductColor n attributes: n name: Greenn created_at: 2009-06-10 04:02:44n updated_at: 2009-06-10 04:02:44n id: "4"n internal_name: Greenn attributes_cache: {}nn"
мысли?
11 ответов:
The
y
метод является удобным способом, чтобы получить некоторые довольно ЯМЛ выход.y ProductColor.all
если вы находитесь в
script/console
как прокомментировал jordanpg, этот ответ устарел. Для Rails 3.2+ вам нужно выполнить следующий код, прежде чем вы сможете получить
y
метод работы:YAML::ENGINE.yamler = 'syck'
в старых версиях Ruby, т. е.
для rails 4 / ruby 2 Вы можете использовать только
puts object.to_yaml
вы должны попробовать hirb. Это драгоценный камень, сделанный для того, чтобы красиво форматировать объекты в консоли ruby. Ваш скрипт/консольный сеанс будет выглядеть так:
>> 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
вы можете узнать больше о hirb на его Домашняя страница.
офигенно печати это тоже хорошо, если вы хотите объект с отступом. Что-то вроде:
$ 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 } ]
чтобы интегрировать его по умолчанию с консолью irb / rails / pry, добавьте в свой
~/.irbrc
или~/.pryrc
file:require "awesome_print" AwesomePrint.irb! # just in .irbrc AwesomePrint.pry! # just in .pryrc
можно также отметить, что вы можете использовать:
j ProductColor.all.inspect
для вывода в формате Json, а не Yaml
>> puts ProductColor.all.to_yaml
просто отлично работает!
Источник:https://stackoverflow.com/a/4830096
привет вы также можете попробовать это в вашем скрипте / консоли, если
>> y ProductColor.all
не работает для вас.
попробуйте это:
>> require 'yaml' >> YAML::ENGINE.yamler = 'syck'
затем
>> y ProductColor.all
у меня были некоторые проблемы с его работой, поэтому я добавлю свои два цента в awesome_print добавьте это в свой Gemfile, предпочтительно в
:development
gem 'awesome_print', require: 'ap'
затем в
rails console
можно сделать
> ap Model.all
Вот и все. Однако вы также можете добавитьrequire "awesome_print" AwesomePrint.irb!
в свой ~/.irbrc, таким образом, awesome_print потребуется в любое время, когда вы откроете консоль, и вы можете просто сделать
модель.все без необходимости набирать текст АП
использовать
irbtools
камень.он автоматически отформатирует вывод консоли плюс вы получите массу отличных функций.
вы можете определить метод проверки ProductColor, чтобы вернуть что-то, что вы найдете приятным. Например:
def inspect "<#{id} - #{name} (#{internal_name})>" end
после чего результат ProductColor.все будет отображаться как что-то вроде [, ...]. Конечно, вы должны настроить метод проверки в соответствии с вашими потребностями, так что он отображает всю необходимую информацию в стиле, который вам нравится.
Edit: также, если проблема заключалась в отсутствии разрывов строк на выходе, вы можете попробуй
require 'pp' pp ProductColor.all
который должен вставлять разрывы строк, где это уместно
чтобы добавить к предложению Alter Lago для использования AwesomePrint, Если вы не можете/не должны/не хотите добавлять awesome_print gem в Gemfile вашего проекта, сделайте это:
gem install awesome_print
Edit ~/.Сиб.rc и добавьте это:
$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'
(убедившись, что путь и версия верны, конечно)
вы также можете попробовать следующее для группы объектов
Object.all.map(&:attributes).to_yaml
Это даст вам гораздо приятнее выход, как
--- id: 1 type: College name: University of Texas --- id: 2 type: College name: University of California
вызов
to_yaml
on атрибуты, а не сам объект спасает вас от просмотра полного содержимого объекта в выводеили
puts Object.last.attributes.to_yaml
для одного объектаСтенография также доступна:
y Object.last.attributes