Cara mendapatkan pemformatan yang bagus di konsol Rails


127

Saya ingin sesuatu seperti ini terlihat bagus:

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

Ini tidak berfungsi:

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

Dan tidak juga ini:

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

Pikiran?

Jawaban:


255

The ymetode adalah cara praktis untuk mendapatkan beberapa output YAML cantik.

y ProductColor.all

Dengan asumsi Anda masuk script/console

Seperti komentar jordanpg, jawaban ini sudah usang. Untuk Rails 3.2+ Anda perlu mengeksekusi kode berikut sebelum Anda bisa mendapatkan ymetode untuk bekerja:

YAML::ENGINE.yamler = 'syck'

Dari ruby-docs

Dalam versi Ruby yang lebih lama, yaitu. <= 1.9, Syck masih disediakan, namun sepenuhnya dihapus dengan rilis Ruby 2.0.0.

Untuk rel 4 / ruby ​​2 Anda bisa menggunakan saja

puts object.to_yaml

5
ini harus ditandai sebagai jawaban yang tepat karena sudah ada di dalamnya, dapat langsung digunakan, dan yang paling penting, sederhana.
botbot

15
Jawaban ini sudah usang. Lihat: stackoverflow.com/questions/11571801/... Untuk membuat ini berfungsi, Anda harus terlebih dahulu mengeksekusi YAML::ENGINE.yamler = 'syck'.
jordanpg

5
Sekarang YAML :: ENGINE.yamler = 'psych'
jumpa

Ini mirip dengan ryanb >> ProductColor.all >> y _
Deepak Lamichhane

1
seperti @botbot katakan di atas, ini adalah jawaban terbaik karena ini berlaku untuk situasi di mana Anda tidak memiliki akses ke .irbrc, alat konsol lain, atau konfigurasi konsol lainnya (seperti, menjadi pengembang kontrak dengan akses terbatas ke wadah / server produksi )
Todd

97

Anda harus mencoba hirb . Ini adalah permata yang dibuat untuk memformat objek di konsol ruby. Skrip / sesi konsol Anda akan terlihat seperti ini:

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

Anda dapat mempelajari lebih lanjut tentang hirb di beranda .


3
Jawaban ryanb pada dasarnya adalah apa yang saya cari, tetapi ini terlalu keren untuk tidak menerimanya.
Tom Lehman

7
Meskipun bukan jawaban untuk pertanyaan asli, mungkin menunjukkan bahwa Anda dapat menambahkan hal-hal hirb ke ~ / .irbrc Anda sehingga Anda tidak perlu meminta dan mengaktifkannya setiap kali.
jordelver

1
Permata ini sudah usang sekarang.
Amrit Dhungana

Apakah ada cara untuk "dengan mudah" mengurutkan kolom dari output? Saya ingin memaksa id kolom menjadi yang pertama dan updated_at & Created_at di akhir (jika Anda menambahkan kolom setelah migrasi pertama, kolom updated_at & Created_at tidak akan berada di akhir)
MrYoshiji

27

Cetak mengagumkan juga bagus jika Anda menginginkan sebuah objek berlekuk. Sesuatu seperti:

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

Untuk mengintegrasikan secara default dengan irb Anda / rel / membongkar konsol, menambah Anda ~/.irbrcatau ~/.pryrcberkas:

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

1
Bisakah saya menggunakan permata ini dengan Rails 4 atau 5 ?? Saya telah menemukan catatan berikut di halaman github: CATATAN: awesome_print v1.2.0 adalah rilis terakhir yang mendukung versi Ruby sebelum v1.9.3 dan versi Rails sebelum v3.0. Awesome_print v2.0 yang akan datang akan membutuhkan Ruby v1.9.3 atau lebih baru dan Rails v3.0 atau lebih baru. Apakah ini berarti bahwa permata sudah ketinggalan zaman dengan versi ini dan menyebabkan konflik ??
ltdev

12
>> puts ProductColor.all.to_yaml

Cukup berhasil!

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


Ini sangat bagus! Saya tidak bisa mendapatkan jawaban terpilih lainnya untuk berfungsi ... Saya kira karena saya menggunakan ActiveResource (sumber daya API)
Crimbo

11

Dapat juga dicatat bahwa Anda dapat menggunakan:

j ProductColor.all.inspect

untuk output dalam format Json daripada Yaml


ini bisa gagal tergantung pada versi JSON / ruby, dan format yang bagus mungkin diperlukan di lingkungan di mana orang tidak bisa memiliki hal
Todd

3
Galat kenaikan ini: JSON :: GeneratorError: hanya generasi objek atau array JSON yang diizinkan
Hassan Akram

8

Hai, Anda juga dapat mencoba ini di skrip / konsol Anda jika

>> y ProductColor.all

tidak bekerja untukmu

Coba ini:

>> require 'yaml'

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

kemudian

>> y ProductColor.all

7

Saya punya beberapa masalah untuk membuatnya bekerja jadi saya akan menambahkan dua sen saya ke awesome_print menambahkan ini ke Gemfile Anda, terutama di :development

gem 'awesome_print', require: 'ap'

lalu masuk

rails console

Anda dapat melakukan

> ap Model.all Itu dia. Namun Anda juga bisa menambahkan

require "awesome_print"
AwesomePrint.irb!

ke ~ / .irbrc Anda, cara ini awesome_print akan diperlukan kapan saja Anda membuka konsol dan Anda cukup melakukannya

Model.all tanpa perlu mengetik ap


6

Anda juga dapat mencoba yang berikut ini untuk sekelompok objek

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

Ini akan memberi Anda hasil yang lebih baik , seperti

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

Memanggil to_yamlatribut daripada objek itu sendiri menyelamatkan Anda dari melihat isi penuh objek dalam output

Atau puts Object.last.attributes.to_yamluntuk satu objek

Steno juga tersedia: y Object.last.attributes


6

Saya pikir solusi ini adalah yang paling akurat. Anda harus mencoba ini:

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

Ini akan memberi Anda output yang sangat bagus dibandingkan dengan format 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"
  }
]

5

Gunakan irbtoolspermata.

Ini akan secara otomatis memformat output konsol plus Anda akan mendapatkan banyak fitur hebat.


Bagus! Tapi saya tidak bisa memformat konten ActiveResource ... kecuali saya melakukan sesuatu yang salah
Crimbo

4

Anda mungkin ingin mendefinisikan metode pemeriksaan ProductColor untuk mengembalikan sesuatu yang Anda anggap bagus. Sebagai contoh:

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

Setelah itu hasil dari ProductColor.all akan ditampilkan sebagai sesuatu seperti [<1 - Putih (Putih)>, ...]. Tentu saja Anda harus menyesuaikan metode inspeksi dengan kebutuhan Anda, sehingga itu akan menampilkan semua informasi yang Anda butuhkan dengan gaya yang Anda sukai.

Sunting: juga jika masalahnya adalah kurangnya jeda baris dalam output, Anda dapat mencoba

require 'pp'
pp ProductColor.all

yang harus menyisipkan linebreak jika perlu


Sebenarnya require 'pp'tidak mungkin di rails console --sandbox. Untuk beberapa alasan saya dapatkan falseketika saya mencoba untuk meminta pp. Ups! sepertinya ppsudah diperlukan secara default di rails console. Saya baru saja melakukannya pp Model.connection_handlerdan mendapat hasil cetak yang cukup besar. Terima kasih.
Hijau

@ Hijau Jika requirekembali false, itu berarti bahwa file telah dimuat.
sepp2k

Mengapa inspecttidak ditampilkan saat melakukan hal yang benar ProductColor.all?
Arnold Roa

3

Untuk menambah saran Alter Lago untuk menggunakan AwesomePrint, Jika Anda tidak bisa / tidak seharusnya / tidak ingin menambahkan permata awesome_print ke Gemfile proyek Anda, lakukan ini:

gem install awesome_print

Edit ~ / .irb.rc dan tambahkan ini:

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

(Tentu saja memastikan jalur dan versinya benar)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.