Как получить хорошее форматирование в консоли 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или~/.pryrcfile: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_printEdit ~/.Сиб.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_yamlon атрибуты, а не сам объект спасает вас от просмотра полного содержимого объекта в выводеили
puts Object.last.attributes.to_yamlдля одного объектаСтенография также доступна:
y Object.last.attributes