Как получить хорошее форматирование в консоли 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: 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"
Мысли?
Ответы
Ответ 1
Метод y
- это удобный способ получить довольно яркий вывод YAML.
y ProductColor.all
Предполагая, что вы находитесь в script/console
Как прокомментировал jordanpg, этот ответ устарел. Для Rails 3.2+ вам нужно выполнить следующий код, прежде чем вы сможете использовать метод y
:
YAML::ENGINE.yamler = 'syck'
От ruby-docs
В старых версиях Ruby, т.е. <= 1,9, Syck все еще предоставляется, однако был полностью удален с выпуском Ruby 2.0.0.
Для рельсов 4/ruby 2 вы можете использовать только
puts object.to_yaml
Ответ 2
Вам следует попробовать hirb. Это жемчужина, созданная для создания довольно твердых объектов в рубиновой консоли. Ваш сеанс script/console будет выглядеть следующим образом:
>> 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 на домашней странице .
Ответ 3
Удивительный отпечаток тоже хорош, если вы хотите отступом объекта. Что-то вроде:
$ 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
}
]
Чтобы интегрировать его по умолчанию с помощью консоли irb/rails/pry, добавьте в свой файл ~/.irbrc
или ~/.pryrc
:
require "awesome_print"
AwesomePrint.irb! # just in .irbrc
AwesomePrint.pry! # just in .pryrc
Ответ 4
Также можно отметить, что вы можете использовать:
j ProductColor.all.inspect
для вывода в формате Json, а не в Yaml
Ответ 5
>> puts ProductColor.all.to_yaml
Просто отлично работает!
Источник: fooobar.com/questions/55350/...
Ответ 6
Привет, вы также можете попробовать это в консоли script/if, если
>> y ProductColor.all
не работает для вас.
Попробуйте следующее:
>> require 'yaml'
>> YAML::ENGINE.yamler = 'syck'
, затем
>> y ProductColor.all
Ответ 7
Используйте irbtools
gem.
Он автоматически отформатирует вывод консоли и вы получите массу отличных функций.
Ответ 8
У меня были проблемы, которые заставляли его работать, поэтому я добавлю свои два цента в awesome_print
добавьте это в свой Gemfile, желательно в :development
gem 'awesome_print', require: 'ap'
то в
rails console
вы можете сделать
> ap Model.all
Это. Однако вы также можете добавить
require "awesome_print"
AwesomePrint.irb!
на ваш ~/.irbrc, таким образом awesome_print будет требоваться при каждом открытии консоли, и вы можете просто сделать
Model.all
без необходимости набирать ap
Ответ 9
Возможно, вы захотите определить метод проверки ProductColor, чтобы вернуть что-то, что вам нравится. Например:
def inspect
"<#{id} - #{name} (#{internal_name})>"
end
После чего результат ProductColor.all будет отображаться как нечто вроде [< 1 - Белый (белый) > ,...]. Конечно, вы должны настроить метод проверки на свои нужды, чтобы он отображал всю необходимую информацию в стиле, который вам нравится.
Изменить: также, если проблема связана с отсутствием разрывов строк на выходе, вы можете попробовать
require 'pp'
pp ProductColor.all
который должен вставлять разрывы строк, если это необходимо
Ответ 10
Чтобы добавить к предложению Alter Lago для использования AwesomePrint,
Если вы не можете/не должны/не хотите добавлять драгоценный камень awesome_print в свой проект Gemfile, сделайте следующее:
gem install awesome_print
Изменить ~/.irb.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'
(Конечно, путь и версия верны, конечно)
Ответ 11
Вы также можете попробовать следующее для группы объектов
Object.all.map(&:attributes).to_yaml
Это даст вам гораздо более приятный результат, например
---
id: 1
type: College
name: University of Texas
---
id: 2
type: College
name: University of California
Вызов to_yaml
атрибутов, а не самого объекта, избавляет вас от просмотра полного содержимого объекта на выходе
Или puts Object.last.attributes.to_yaml
для одного объекта
Также доступна стенография: y Object.last.attributes