ruby on rails - sintaxis - Cómo obtener un buen formato en la consola de Rails
ruby on rails tutorial español (11)
Deberías probar hirb . Es una gema hecha para dar formato bonito a los objetos en la consola ruby. Su secuencia de comandos / 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
Puede obtener más información sobre hirb en su homepage .
Quiero que algo como esto se vea bien:
>> 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 hace 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?
El método y
es una forma práctica de obtener un poco de salida YAML.
y ProductColor.all
Asumiendo que estás en script/console
Como comentó jordanpg, esta respuesta está desactualizada. Para Rails 3.2+ necesita ejecutar el siguiente código antes de poder hacer funcionar el método y
:
YAML::ENGINE.yamler = ''syck''
De ruby-docs
En versiones anteriores de Ruby, es decir. <= 1,9, todavía se proporciona Syck, sin embargo, se eliminó por completo con el lanzamiento de Ruby 2.0.0.
Para rieles 4 / ruby 2 puede usar solo
puts object.to_yaml
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 se mostrará como [<1 - Blanco (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 es la falta de saltos de línea en la salida, puede intentar
require ''pp''
pp ProductColor.all
que debe insertar saltos de línea cuando corresponda
Hola, también puedes probar esto en tu script / consola si
>> y ProductColor.all
no funciona para ti
Prueba esto:
>> require ''yaml''
>> YAML::ENGINE.yamler = ''syck''
entonces
>> y ProductColor.all
Para agregar a la sugerencia de Alter Lago para usar AwesomePrint, si no puedes / no quieres / no quieres agregar la gema awesome_print al Gemfile de tu proyecto, haz esto:
gem install awesome_print
Edite ~ / .irb.rc y agregue esto:
$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''
(Asegurándose de que la ruta y la versión son correctas, por supuesto)
También puedes probar lo siguiente para un grupo de objetos
Object.all.map(&:attributes).to_yaml
Esto te dará un resultado mucho mejor , como
---
id: 1
type: College
name: University of Texas
---
id: 2
type: College
name: University of California
Llamar to_yaml
en atributos en lugar de en el objeto mismo le evita ver el contenido completo del objeto en la salida
O puts Object.last.attributes.to_yaml
para un solo objeto
La abreviatura también está disponible: y Object.last.attributes
También se puede notar que puede usar:
j ProductColor.all.inspect
para salir en formato Json en lugar de Yaml
Tuve algunos problemas para hacerlo funcionar, así que agregaré mis dos centavos a awesome_print. Añádalo a su Gemfile, preferiblemente en :development
gem ''awesome_print'', require: ''ap''
luego en
rails console
tu puedes hacer
> ap Model.all
Eso es todo. Sin embargo, también puedes agregar
require "awesome_print"
AwesomePrint.irb!
a su ~ / .irbrc, de esta manera se requerirá awesome_print cada vez que abra la consola y simplemente puede hacer
Model.all sin la necesidad de escribir ap
Usa la gema de irbtools
Formateará automáticamente la salida de la consola y obtendrá toneladas de excelentes funciones.
Impresionante impresión también es agradable si quieres un objeto con sangría. 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 => "[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
}
]
Para integrarlo por defecto con su consola irb / rails / pry, agregue a su ~/.irbrc
o ~/.pryrc
:
require "awesome_print"
AwesomePrint.irb! # just in .irbrc
AwesomePrint.pry! # just in .pryrc
>> puts ProductColor.all.to_yaml
Simplemente funciona bien!
Fuente: https://.com/a/4830096