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.