Rails konsolunda güzel biçimlendirme nasıl elde edilir


127

Güzel görünmesi için böyle bir şey almak istiyorum:

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

Bu çalışmıyor:

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

Ve bu da yapmıyor:

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

Düşünceler?

Yanıtlar:


255

yYöntem bazı güzel YAML çıkışını almak için kullanışlı bir yoldur.

y ProductColor.all

İçinde olduğunuzu varsayarak script/console

Jordanpg'nin söylediği gibi, bu cevap güncel değil. Rails 3.2+ için, yyöntemi çalıştırmadan önce aşağıdaki kodu çalıştırmanız gerekir :

YAML::ENGINE.yamler = 'syck'

Gönderen yakut-docs

Daha eski Ruby sürümlerinde, yani. <= 1.9, Syck hala sağlanmıştır, ancak Ruby 2.0.0'ın yayınlanmasıyla tamamen kaldırılmıştır.

Raylar 4 / ruby ​​2 için sadece

puts object.to_yaml

5
Bu, yerleşik olduğu için doğru yanıt olarak işaretlenmelidir, hemen kullanılabilir ve en önemlisi basittir.
— botbot

15
Bu cevap güncel değil. Bakınız: stackoverflow.com/questions/11571801/… Bunun işe yaraması için önce yürütmeniz gerekir YAML::ENGINE.yamler = 'syck'.
— jordanpg

5
Şimdi YAML :: ENGINE.yamler = 'psych'
— jumpa

Bu ryanb'ye benzer >> ProductColor.all >> y _
— Deepak Lamichhane

1
@botbot'un yukarıda söylediği gibi, bu en iyi cevaptır, çünkü bir .irbrc, diğer konsol araçlarına veya konsolun diğer konfigürasyonlarına erişiminizin olmadığı durumlar için geçerlidir (bir üretim kapsayıcısına / sunucusuna sınırlı erişime sahip sözleşmeli bir geliştirici olmak gibi) )
— Todd

97

Sen denemelisiniz hirb . Ruby konsolunda nesneleri güzel bir şekilde biçimlendirmek için yapılmış bir mücevher. Komut dosyası / konsol oturumunuz şöyle görünecektir:

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

Ana sayfasından hirb hakkında daha fazla bilgi edinebilirsiniz .


3
ryanb'ın cevabı temelde aradığım şeydi, ama bu kabul edilmeyecek kadar havalı.
— Tom Lehman

7
Orijinal soruya bir cevap olmasa da, hirb öğelerini ~ / .irbrc dosyanıza ekleyebileceğinize işaret ediyor olabilir, böylece her seferinde bunu zorunlu kılmanıza ve etkinleştirmenize gerek kalmaz.
— jordelver

1
Bu mücevher artık modası geçmiş.
— Amrit Dhungana

Çıktının sütunlarını "kolayca" sıralamanın bir yolu var mı? Sütun kimliğini ilk ve en sonunda update_at & created_at olmaya zorlamak isterim (ilk geçişten sonra sütunlar eklerseniz, updated_at & created_at sütunları en sonunda olmayacaktır)
— MrYoshiji

27

Girintili bir nesne istiyorsanız, harika baskı da güzel. Gibi bir şey:

$ 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
    }
]

Varsayılan olarak irb / rails / pry konsolunuzla entegre etmek için, ~/.irbrcveya ~/.pryrcdosyanıza ekleyin :

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

1
Bu mücevheri Rails 4 veya 5 ile kullanabilir miyim? Github sayfasında şu notu buldum: NOT: awesome_print v1.2.0, v1.9.3'ten önceki Ruby sürümlerini ve v3.0'dan önceki Rails sürümlerini destekleyen son sürümdür. Yaklaşan awesome_print v2.0, Ruby v1.9.3 veya sonraki bir sürümünü ve Rails v3.0 veya sonrasını gerektirecektir. Bu, cevherin bu sürümlerle modasının geçtiği ve çatışmalara neden olduğu anlamına mı geliyor?
— ltdev


11

Ayrıca kullanabileceğiniz not edilebilir:

j ProductColor.all.inspect

Yaml yerine Json formatında çıktı almak için


bu, JSON / ruby ​​sürümüne bağlı olarak başarısız olabilir ve güzel biçimlendirme, güzel şeylere sahip
— Todd

3
Bu artış hatası: JSON :: GeneratorError: yalnızca JSON nesnelerinin veya dizilerinin oluşturulmasına izin verilir
— Hassan Akram

8

Merhaba, bunu komut dosyanızda / konsolunuzda da deneyebilirsiniz.

>> y ProductColor.all

senin için çalışmıyor.

Bunu dene:

>> require 'yaml'

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

sonra

>> y ProductColor.all

7

Çalışması için bazı sorunlar yaşadım, bu yüzden iki kuruşumu awesome_print'e ekleyeceğim bunu Gemfile'ınıza ekleyin, tercihen :development

gem 'awesome_print', require: 'ap'

daha sonra

rails console

yapabilirsin

> ap Model.all Bu kadar. Ancak şunu da ekleyebilirsiniz

require "awesome_print"
AwesomePrint.irb!

~ / .irbrc dosyanıza, bu şekilde awesome_print, konsolu her açtığınızda gerekli olacaktır ve bunu kolayca yapabilirsiniz.

Ap yazmaya gerek kalmadan model.all


6

Bir grup nesne için aşağıdakileri de deneyebilirsiniz

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

Bu size çok daha güzel çıktılar verecektir.

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

to_yamlNesnenin kendisi yerine nitelikleri çağırmak , sizi çıktıdaki nesnenin tüm içeriğini görüntülemekten kurtarır

Veya puts Object.last.attributes.to_yamltek bir nesne için

Steno da mevcuttur: y Object.last.attributes


6

Bence bu çözüm en doğru olanı. Bunu denemelisin:

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

Bu size YAML formatına kıyasla çok güzel bir çıktı verecektir:

[
  {
    "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"
  }
]

5

irbtoolsGem kullan .

Konsol çıktısını otomatik olarak biçimlendirecek, ayrıca tonlarca harika özellik elde edeceksiniz.


Güzel! Ama ActiveResource içeriğini biçimlendirmesini sağlayamıyorum ... yanlış bir şey yapmıyorsam
— Crimbo

4

Hoş bulduğunuz bir şeyi iade etmek için ProductColor'un inceleme yöntemini tanımlamak isteyebilirsiniz. Örneğin:

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

Bundan sonra ProductColor.all sonucu [<1 - Beyaz (Beyaz)>, ...] gibi görünecektir. Elbette, inceleme yöntemini ihtiyaçlarınıza göre ayarlamanız gerekir, böylece ihtiyacınız olan tüm bilgileri istediğiniz bir tarzda görüntüler.

Düzenleme: Ayrıca sorun çıktıdaki satır sonlarının eksikliğinden kaynaklanıyorsa, deneyebilirsiniz

require 'pp'
pp ProductColor.all

uygun olan yerlerde satır kırılmaları eklenmelidir


Aslında require 'pp'içinde mümkün değil rails console --sandbox. Nedense falseihtiyaç duymaya çalıştığımda alıyorum pp. Hata! ppzaten varsayılan olarak gerekli görünüyor rails console. Az önce yaptım pp Model.connection_handlerve oldukça büyük çıktılar aldım. Teşekkürler.
— Yeşil

Eğer @Green requiregetiri falsedosya zaten yüklenmiş sadece araç o.
— sepp2k

inspectSadece yaparken neden görüntülenmiyor ProductColor.all?
— Arnold Roa

3

Alter Lago'nun AwesomePrint'i kullanma önerisine eklemek için, awesome_print gem'i projenizin Gemfile'ına ekleyemiyorsanız / eklemek istemiyorsanız / istemiyorsanız, şunu yapın:

gem install awesome_print

~ / .İrb.rc dosyasını düzenleyin ve şunu ekleyin:

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

(Yolun ve sürümün doğru olduğundan emin olmak elbette)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.