Como conseguir boas formatação no console Rails
-
22-07-2019 - |
Pergunta
Eu quero obter algo como isto para uma boa aparência:
>> 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">]
Isso não funciona:
>> 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\">]"
E nem faz isso:
>> 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"
Os pensamentos?
Solução
O método y
é uma maneira prática de obter alguma saída muito YAML.
y ProductColor.all
Assumindo que você está em script/console
Como jordanpg comentou, esta resposta está desatualizado. Para Rails 3.2+ você precisa executar o código a seguir antes que você possa obter o método y
ao trabalho:
YAML::ENGINE.yamler = 'syck'
A partir ruby-docs
Em versões mais antigas do rubi, ie. <= 1,9, Syck ainda é fornecido, no entanto, ele foi completamente removido com a libertação de rubi 2.0.0.
Para rails 4 / ruby ??2 você poderia usar apenas
puts object.to_yaml
Outras dicas
Você deve tentar hirb . É um tesouro feito para a objetos formato bonitas no console de rubi. Sua sessão script / console ficaria assim:
>> 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
Você pode aprender mais sobre hirb no seu homepage .
impressionante impressão é muito agradável se você quiser um objeto recuado. Algo como:
$ 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
}
]
Para integrá-lo por padrão com o IRB / rails / alavanca console, adicionar ao seu arquivo ~/.irbrc
ou ~/.pryrc
:
require "awesome_print"
AwesomePrint.irb! # just in .irbrc
AwesomePrint.pry! # just in .pryrc
Também pode ser notado que você pode usar:
j ProductColor.all.inspect
para saída no formato JSON em vez de yaml
>> puts ProductColor.all.to_yaml
Simplesmente funciona bem!
Oi você pode também tentar isso no seu script / console se
>> y ProductColor.all
não funciona para você.
Tente isto:
>> require 'yaml'
>> YAML::ENGINE.yamler = 'syck'
seguida,
>> y ProductColor.all
Eu tinha alguns problemas fazê-lo funcionar, então eu vou adicionar meus dois centavos para awesome_print
adicione isso ao seu Gemfile, de preferência em :development
gem 'awesome_print', require: 'ap'
, em seguida,
rails console
você pode fazer
> ap Model.all
É isso aí. No entanto, você também pode adicionar
require "awesome_print"
AwesomePrint.irb!
para seu ~ / hora .irbrc, será necessária desta forma awesome_print você abrir o console e você pode simplesmente fazer
Model.all sem a necessidade de digitação ap
Use irbtools
jóia.
Ele irá formatar automaticamente o a saída do console mais você vai receber toneladas de grandes recursos.
Você pode querer definir de ProductColor inspecionar método para retornar algo que você achar agradável. Por exemplo:
def inspect
"<#{id} - #{name} (#{internal_name})>"
end
Depois que o resultado de ProductColor.all será exibido como algo como [<1 - White (Branco)>, ...]. Claro que você deve ajustar o método de inspeccionar as suas necessidades, para que ele exibe todas as informações que você precisa em um estilo que você gosta.
Edit: também se o problema foi a falta de quebras de linha na saída, você pode tentar
require 'pp'
pp ProductColor.all
que deve inserir quebras de linha se necessário
Para adicionar a sugestão de Alter Lago para usar AwesomePrint, Se você não pode / não deve / não deseja adicionar a gema awesome_print para Gemfile do seu projeto, faça o seguinte:
gem install awesome_print
Editar ~ / .irb.rc e acrescentar o seguinte:
$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'
(certificando-se o caminho e versão estão corretos, é claro)
Você também pode tentar o seguinte para um grupo de objetos
Object.all.map(&:attributes).to_yaml
Isto lhe dará muito mais agradável de saída, como
---
id: 1
type: College
name: University of Texas
---
id: 2
type: College
name: University of California
Chamando to_yaml
em atributos em vez do próprio objeto evita que você visualizar o conteúdo completo do objeto na saída
Ou puts Object.last.attributes.to_yaml
para um único objeto
Taquigrafia também está disponível: y Object.last.attributes
Eu penso que esta solução é a mais precisa. Você deve tentar este:
puts JSON.pretty_generate Entry.all.map(&:attributes)
Isso vai lhe dar uma saída agradável e super comparar para o formato 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"
}
]