วิธีการจัดรูปแบบที่ดีในคอนโซล Rails


127

ฉันต้องการได้รับสิ่งนี้เพื่อดูดี:

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

สิ่งนี้ใช้ไม่ได้:

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

และไม่ทำสิ่งนี้:

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

คิด?

คำตอบ:


255

yวิธีเป็นวิธีที่มีประโยชน์ที่จะได้รับการส่งออกบาง YAML สวย

y ProductColor.all

สมมติว่าคุณอยู่ใน script/console

ในฐานะที่เป็น jordanpg แสดงความคิดเห็นคำตอบนี้ล้าสมัย สำหรับ Rails 3.2+ คุณต้องรันโค้ดต่อไปนี้ก่อนจึงจะสามารถใช้yวิธีการทำงานได้:

YAML::ENGINE.yamler = 'syck'

จากทับทิมเอกสาร

ในทับทิมรุ่นเก่าเช่น <= 1.9, Syck ยังคงมีให้อย่างไรก็ตามมันถูกลบออกอย่างสมบูรณ์ด้วยการเปิดตัว Ruby 2.0.0

สำหรับ Rails 4 / ruby ​​2 คุณสามารถใช้มันได้

puts object.to_yaml

5
ควรทำเครื่องหมายเป็นคำตอบที่ถูกต้องตั้งแต่สร้างขึ้นสามารถใช้งานได้ทันทีและที่สำคัญที่สุดคือเรียบง่าย
botbot

15
คำตอบนี้ล้าสมัยแล้ว ดู: stackoverflow.com/questions/11571801/… เพื่อให้งานนี้คุณต้องดำเนินการYAML::ENGINE.yamler = 'syck'ก่อน
jordanpg

5
มันตอนนี้ YAML :: ENGINE.yamler = 'จิต'
jumpa

สิ่งนี้คล้ายกับ ryanb >> ProductColor.all >> y _
Deepak Lamichhane

1
เช่น @botbot กล่าวข้างต้นนี่เป็นคำตอบที่ดีที่สุดเนื่องจากมันใช้กับสถานการณ์ที่คุณไม่สามารถเข้าถึง.irbrcเครื่องมือคอนโซลอื่น ๆ หรือการกำหนดค่าอื่น ๆ ของคอนโซล (เช่นเป็นนักพัฒนาที่มีสัญญากับการเข้าถึงคอนเทนเนอร์ / เซิร์ฟเวอร์ที่ใช้งานจริง )
ทอดด์

97

คุณควรพยายามhirb มันเป็นอัญมณีที่สร้างขึ้นเพื่อจัดรูปแบบวัตถุสวย ๆ ในคอนโซลทับทิม เซสชันสคริปต์ / คอนโซลของคุณจะเป็นดังนี้:

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

คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ hirb ที่ดีในหน้าแรก


3
คำตอบของ ryanb นั้นเป็นสิ่งที่ฉันกำลังมองหา แต่มันก็เจ๋งเกินไปที่จะไม่ยอมรับ
Tom Lehman

7
แม้ว่าจะไม่ใช่คำตอบสำหรับคำถามดั้งเดิม แต่อาจชี้ให้เห็นว่าคุณสามารถเพิ่มสิ่ง hirb ลงใน ~ / .irbrc ของคุณเพื่อให้คุณไม่ต้องใช้และเปิดใช้งานในแต่ละครั้ง
jordelver

1
อัญมณีนี้ล้าสมัยแล้ว
Amrit Dhungana

มีวิธีการเรียงลำดับ "ง่าย ๆ " คอลัมน์ของผลลัพธ์หรือไม่ ฉันชอบที่จะบังคับให้ id คอลัมน์เป็นที่หนึ่งและ updated_at & created_at ในตอนท้าย (ถ้าคุณเพิ่มคอลัมน์หลังจากการย้ายครั้งแรกคอลัมน์ที่ได้รับการ
อัพเดต

27

การพิมพ์ที่ยอดเยี่ยมก็ดีเช่นกันหากคุณต้องการให้วัตถุเยื้อง สิ่งที่ต้องการ:

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

หากต้องการรวมเข้ากับ irb / rails / pry console โดยค่าเริ่มต้นให้เพิ่มไฟล์~/.irbrcหรือ~/.pryrcไฟล์ของคุณ:

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

1
ฉันสามารถใช้อัญมณีนี้กับ Rails 4 หรือ 5 ได้หรือไม่? ฉันพบบันทึกย่อต่อไปนี้ในหน้า github: NOTE: awesome_print v1.2.0 เป็นรุ่นล่าสุดที่รองรับ Ruby รุ่นก่อนหน้า v1.9.3 และ Rails รุ่นก่อนหน้า v3.0 the Awesome_print v2.0 ที่กำลังจะมาถึงต้องใช้ Ruby v1.9.3 ขึ้นไปและ Rails v3.0 หรือใหม่กว่า นี่หมายความว่าอัญมณีล้าสมัยกับเวอร์ชันเหล่านี้และก่อให้เกิดความขัดแย้งหรือไม่?
ltdev

12
>> puts ProductColor.all.to_yaml

ทำงานได้ดี!

ที่มา: https://stackoverflow.com/a/4830096


มันใช้งานได้ดี! ฉันไม่สามารถรับคำตอบที่ได้รับการโหวตมากที่สุดในการทำงาน ... ฉันเดาว่าเพราะฉันใช้ ActiveResource (ทรัพยากร API)
Crimbo

11

อาจสังเกตได้ว่าคุณสามารถใช้:

j ProductColor.all.inspect

เพื่อเอาท์พุทในรูปแบบ Json มากกว่า Yaml


สิ่งนี้อาจล้มเหลวขึ้นอยู่กับรุ่นของ JSON / ruby ​​และการจัดรูปแบบที่ดีอาจจำเป็นต้องใช้ในสภาพแวดล้อมที่มีสิ่งหนึ่งที่ไม่สามารถทำได้
Todd

3
ข้อผิดพลาดในการเพิ่มนี้: JSON :: GeneratorError: อนุญาตให้สร้างวัตถุหรืออาร์เรย์ JSON เท่านั้น
Hassan Akram

8

สวัสดีคุณสามารถลองสิ่งนี้ได้ในสคริปต์ / คอนโซลของคุณหาก

>> y ProductColor.all

ไม่ทำงานสำหรับคุณ

ลองสิ่งนี้:

>> require 'yaml'

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

แล้วก็

>> y ProductColor.all

7

ฉันมีปัญหาในการทำให้มันทำงานดังนั้นฉันจะเพิ่มสองเซ็นต์ของฉันไปที่ Awesome_print เพิ่มสิ่งนี้ใน Gemfile ของคุณโดยเฉพาะอย่างยิ่ง :development

gem 'awesome_print', require: 'ap'

จากนั้นใน

rails console

คุณทำได้

> ap Model.all แค่นั้นแหละ. อย่างไรก็ตามคุณสามารถเพิ่มได้

require "awesome_print"
AwesomePrint.irb!

ถึง ~ / .irbrc ของคุณวิธีนี้จะต้องใช้ Awesome_print ทุกครั้งที่คุณเปิดคอนโซลและคุณสามารถทำได้

รุ่นทั้งหมดโดยไม่ต้องพิมพ์ ap


6

คุณอาจลองทำสิ่งต่อไปนี้สำหรับกลุ่มวัตถุ

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

สิ่งนี้จะให้ผลลัพธ์ที่ดีกว่าเช่น

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

การเรียกto_yamlใช้แอตทริบิวต์แทนที่จะเป็นวัตถุจะช่วยให้คุณไม่สามารถดูเนื้อหาทั้งหมดของวัตถุในผลลัพธ์ได้

หรือputs Object.last.attributes.to_yamlวัตถุเดียว

ชวเลขยังมีอยู่: y Object.last.attributes


6

ฉันคิดว่าวิธีนี้เป็นวิธีที่ถูกต้องที่สุด คุณควรลองสิ่งนี้:

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

สิ่งนี้จะให้ผลลัพธ์ที่ดีมากเมื่อเทียบกับรูปแบบ 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

ใช้irbtoolsอัญมณี

มันจะจัดรูปแบบเอาต์พุตคอนโซลโดยอัตโนมัติและคุณจะได้รับคุณสมบัติที่ยอดเยี่ยมมากมาย


ดี! แต่ฉันไม่สามารถจัดรูปแบบเนื้อหา ActiveResource ... เว้นแต่ว่าฉันกำลังทำอะไรผิดพลาด
Crimbo

4

คุณอาจต้องการกำหนดวิธีการตรวจสอบของ ProductColor เพื่อส่งคืนสิ่งที่คุณเห็นว่าดี ตัวอย่างเช่น:

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

หลังจากนั้นผลลัพธ์ของ ProductColor.all จะแสดงเป็นอย่างเช่น [<1 - สีขาว (สีขาว)>, ... ] แน่นอนคุณควรปรับวิธีการตรวจสอบตามความต้องการของคุณเพื่อที่จะแสดงข้อมูลทั้งหมดที่คุณต้องการในสไตล์ที่คุณชอบ

แก้ไข: หากปัญหาคือไม่มีตัวแบ่งบรรทัดในผลลัพธ์คุณอาจลอง

require 'pp'
pp ProductColor.all

ซึ่งควรแทรก linebreaks ตามความเหมาะสม


เป็นเรื่องของความเป็นจริงเป็นไปไม่ได้ในrequire 'pp' rails console --sandboxด้วยเหตุผลบางอย่างที่ฉันได้รับเมื่อฉันพยายามที่จะต้องใช้false ppอ๊ะ! ดูเหมือนว่าppเป็นสิ่งจำเป็นโดยค่าเริ่มต้นrails consoleแล้ว ฉันเพิ่งทำpp Model.connection_handlerและได้งานพิมพ์ที่ค่อนข้างใหญ่ ขอบคุณ
สีเขียว

@Green หากrequireส่งคืนfalseหมายความว่าโหลดไฟล์เรียบร้อยแล้ว
sepp2k

ทำไมถึงinspectไม่แสดงเมื่อทำเพียงProductColor.all?
Arnold Roa

3

ในการเพิ่มคำแนะนำของ Alter Lago สำหรับการใช้ AwesomePrint หากคุณไม่สามารถ / ไม่ควร / ไม่ต้องการเพิ่ม Awesome_print gem ใน Gemfile ของโครงการให้ทำดังนี้

gem install awesome_print

แก้ไข ~ / .irb.rc และเพิ่มสิ่งนี้:

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

(ทำให้แน่ใจว่าเส้นทางและเวอร์ชันถูกต้องแน่นอน)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.