2009-08-03 18 views
105

quiero conseguir algo como esto para verte bien:Cómo obtener buen formato en los rieles de la consola

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

esto no 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\">]" 

Y tampoco esto:

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

¿Pensamientos?

Respuesta

231

El método y es una manera práctica de obtener alguna bonita salida YAML.

y ProductColor.all 

Suponiendo que se encuentran en script/console

Como jordanpg comentado, esta respuesta no está actualizado. Para rieles 3.2+ que necesita para ejecutar el siguiente código antes de poder obtener el método y al trabajo:

YAML::ENGINE.yamler = 'syck' 

De ruby-docs

In older Ruby versions, ie. <= 1.9, Syck is still provided, however it was completely removed with the release of Ruby 2.0.0.

para raíles 4/rubí 2 se podría utilizar simplemente

puts object.to_yaml 
+5

esto debe marcarse como la respuesta correcta, ya que está integrado, se puede usar de inmediato y, sobre todo, es simple. – botbot

+2

@masterkrang - ¡ESTOY DE ACUERDO! –

+15

Esta respuesta no está actualizada. Ver: http://stackoverflow.com/questions/11571801/rails-console-y-helper-returns-nameerror-rather-than-yaml-formatting-output Para que esto funcione, primero tiene que ejecutar 'YAML :: ENGINE .yamler = 'syck''. – jordanpg

4

Es posible que desee definir el método de inspección de ProductColor para devolver algo que le parezca agradable. Por ejemplo:

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

Después de lo cual el resultado de ProductColor.all mostrará como algo parecido a [< 1 - White (blanco)>, ...]. Por supuesto, debe ajustar el método de inspección según sus necesidades, de modo que muestre toda la información que necesita en un estilo que le guste.

Editar: también si el problema fue la falta de saltos de línea en la salida, puede intentar

require 'pp' 
pp ProductColor.all 

que debe insertar saltos de línea en su caso

+0

gracias yo estaba buscando pp – GiH

+0

Como cuestión de hecho, requiere ' 'pp'' no es posible en la consola' rieles - -sandbox'. Por alguna razón, obtengo 'false' cuando intento solicitar' pp'. Oops! parece que 'pp' ya es requerido por defecto en' rails console'. Acabo de hacer 'pp Model.connection_handler' y obtuve una gran salida impresa. Gracias. – Green

+0

@Green Si 'require' devuelve' false', eso solo significa que el archivo ya se ha cargado. – sepp2k

88

Deberías probar hirb. Es una gema hecha para dar formato bonito a los objetos en la consola ruby. La secuencia de comandos de sesión/consola se vería así:

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

Usted puede aprender más sobre hirb en su homepage.

+2

La respuesta de ryanb es básicamente lo que estaba buscando, pero esto es demasiado genial para no aceptar. –

+7

Aunque no es una respuesta a la pregunta original, podría indicar que puede agregar el elemento hirb a su ~/.irbrc para que no tenga que solicitarlo y habilitarlo cada vez. – jordelver

+1

Esta joya está desactualizada ahora. –

10

También cabe señalar que se puede utilizar:

j ProductColor.all.inspect 

a la salida en formato JSON en lugar de Yaml

+0

esto puede fallar dependiendo de la versión de JSON/ruby , y el buen formato puede ser necesario en un entorno donde no se pueden tener cosas buenas – Todd

+2

Este error de aumento: JSON :: GeneratorError: solo se permite la generación de objetos JSON o matrices –

18

Awesome print también es muy bueno si quieres un objeto con sangría.Algo así 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 => "[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 
    } 
] 

integrarlo de forma predeterminada con la consola IRB/rieles/palanca, añadir a su archivo ~/.irbrc o ~/.pryrc:

require "awesome_print" 
AwesomePrint.irb! # just in .irbrc 
AwesomePrint.pry! # just in .pryrc 
+1

¿Puedo usar esta joya con Rails 4 o 5? Encontré la siguiente nota en la página de github: NOTA: awesome_print v1.2.0 es la última versión compatible con las versiones de Ruby anteriores a v1.9.3 y las versiones de Rails anteriores a v3.0. El próximo awesome_print v2.0 requerirá Ruby v1.9.3 o posterior y Rails v3.0 o posterior. ¿Esto significa que la gema está desactualizada con estas versiones y causa conflictos? – Lykos

3

Para añadir a Alter sugerencia del Lago para el uso de AwesomePrint, Si no puede/no debe/no desea añadir la gema awesome_print a Gemfile de su proyecto, haga lo siguiente:

gem install awesome_print

Editar ~/.irb.rc y añadir lo siguiente:

$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'

(Asegurarse de que la ruta de acceso y la versión es correcta, por supuesto)

5

Uso irbtools joya.

Formateará automáticamente la salida de la consola y obtendrá toneladas de excelentes funciones.

+0

¡Agradable! Pero no puedo conseguir que formatee el contenido de ActiveResource ... a menos que esté haciendo algo mal – Crimbo

8

Hola también se puede probar esto en el script/consola si

>> y ProductColor.all 

que no trabaja para usted.

Prueba esto:

>> require 'yaml' 

>> YAML::ENGINE.yamler = 'syck' 

continuación

>> y ProductColor.all 
9
>> puts ProductColor.all.to_yaml 

Simplemente funciona bien!

Fuente: https://stackoverflow.com/a/4830096

+0

¡Esto funciona genial! No pude conseguir las otras respuestas más votadas para trabajar ... supongo que porque estoy usando ActiveResource (recursos API) – Crimbo

5

tuve algunas dificultades hacer que funcione de manera voy a añadir mi granito de arena a awesome_print Agregar a su Gemfile, preferiblemente en :development

gem 'awesome_print', require: 'ap'

después en

rails console

se puede hacer

> ap Model.all Eso es todo. Sin embargo, también puede agregar

require "awesome_print" 
AwesomePrint.irb! 

a su ~/.irbrc, se requerirá esta manera awesome_print en cualquier momento se abre la consola y se puede hacer simplemente

modelo.todo sin la necesidad de ap tipificación

3

También puede intentar lo siguiente para un grupo de objetos

Object.all.map(&:attributes).to_yaml 

Esto le dará mucho más agradable de salida, como

--- 
id: 1 
type: College 
name: University of Texas 
--- 
id: 2 
type: College 
name: University of California 

Calling to_yaml en los atributos en lugar de en el objeto mismo le permite ver el contenido completo del objeto en la salida

O puts Object.last.attributes.to_yaml para un solo objeto

taquigrafía también está disponible: y Object.last.attributes

Cuestiones relacionadas