Как получить хорошее форматирование в консоли 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 110

11 ответов:

The y метод является удобным способом, чтобы получить некоторые довольно ЯМЛ выход.

y ProductColor.all

если вы находитесь в script/console

как прокомментировал jordanpg, этот ответ устарел. Для Rails 3.2+ вам нужно выполнить следующий код, прежде чем вы сможете получить y метод работы:

YAML::ENGINE.yamler = 'syck'

С ruby-docs

в старых версиях 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