Как получить хорошее форматирование в консоли Rails

StackOverflow https://stackoverflow.com/questions/1224525

  •  22-07-2019
  •  | 
  •  

Вопрос

Я хочу получить что-то подобное, чтобы это выглядело красиво:

>> 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"

Мысли?

Это было полезно?

Решение

В y метод - это удобный способ получить симпатичный результат YAML.

y ProductColor.all

Предполагая, что вы находитесь в script/console

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

YAML::ENGINE.yamler = 'syck'

От ruby-документы

В более старых версиях Ruby, ie.<= 1.9, Syck по-прежнему предоставляется, однако он был полностью удален с выпуском Ruby 2.0.0.

Для rails 4 / ruby 2 вы могли бы использовать просто

puts object.to_yaml

Другие советы

Ты должен попробовать хирб.Это драгоценный камень, созданный для красивого форматирования объектов в консоли ruby.Ваш сеанс 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 на его Домашняя страница.

Потрясающий принт это тоже неплохо, если вы хотите, чтобы объект имел отступ.Что - то вроде:

$ 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 файл:

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 будет требоваться всякий раз, когда вы открываете консоль, и вы можете просто сделать

Модель.все без необходимости ввода ap

Использование irbtools драгоценный камень.

Это автоматически отформатирует вывод на консоль, плюс вы получите массу отличных функций.

Возможно, вы захотите определить метод проверки ProductColor, чтобы возвращать то, что вам нравится.Например:

def inspect
  "<#{id} - #{name} (#{internal_name})>"
end

После чего результат ProductColor.все будет отображаться примерно так [<1 - Белый (White)>, ...].Конечно, вы должны настроить метод проверки в соответствии с вашими потребностями, чтобы он отображал всю необходимую вам информацию в стиле, который вам нравится.

Редактировать:также, если проблема заключалась в отсутствии разрывов строк в выходных данных, вы могли бы попробовать

require 'pp'
pp ProductColor.all

который должен вставлять разрывы строк там, где это уместно

Чтобы добавить к предложению 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'

(Разумеется, убедившись, что путь и версия указаны правильно)

Вы также можете попробовать следующее для группы объектов

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

Я думаю, что это решение является наиболее точным.Вы должны попробовать это:

puts JSON.pretty_generate Entry.all.map(&:attributes)

Это даст вам очень приятный результат по сравнению с форматом 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"
  }
]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top