रेल्स कंसोल में अच्छी फॉर्मेटिंग कैसे प्राप्त करें


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 ने टिप्पणी की थी, यह उत्तर पुराना है। 3.2+ के लिए आपको yकार्य करने की विधि प्राप्त करने से पहले आपको निम्नलिखित कोड निष्पादित करना होगा:

YAML::ENGINE.yamler = 'syck'

से माणिक डॉक्स

पुराने रूबी संस्करणों में, यानी। <= 1.9, साइक अभी भी प्रदान किया गया है, हालांकि इसे रूबी 2.0.0 की रिहाई के साथ पूरी तरह से हटा दिया गया था।

रेल 4 / रूबी 2 के लिए आप बस इस्तेमाल कर सकते हैं

puts object.to_yaml

5
इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए क्योंकि इसे बनाया गया है, इसे तुरंत इस्तेमाल किया जा सकता है, और सबसे बढ़कर, सरल।
बॉटबोट

15
यह उत्तर पुराना है। देखें: stackoverflow.com/questions/11571801/… इस काम को करने के लिए, आपको पहले निष्पादित करना होगा YAML::ENGINE.yamler = 'syck'
jordanpg 18

5
इसका अब YAML :: Engine.yamler = 'psych'
जम्पा

यह ryanb >> ProductColor.all >> y _
दीपक Lamichhane

1
जैसे @botbot ने ऊपर कहा, यह सबसे अच्छा जवाब है क्योंकि यह उन स्थितियों पर लागू होता है जहां आप किसी .irbrcकंसोल, अन्य कंसोल टूल या कंसोल के अन्य कॉन्फ़िगरेशन तक पहुंच प्राप्त नहीं करते हैं (जैसे, एक उत्पादन कंटेनर / सर्वर तक सीमित पहुंच के साथ अनुबंधित देव होना )
टोड

97

आपको हिर्ब की कोशिश करनी चाहिए । यह माणिक कंसोल में सुंदर प्रारूप की वस्तुओं से बना रत्न है। आपकी स्क्रिप्ट / कंसोल सत्र इस तरह दिखेगा:

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

आप इसके होमपेज पर हिर्ब के बारे में अधिक जान सकते हैं ।


3
रैनब का जवाब मूल रूप से वही है जो मैं ढूंढ रहा था, लेकिन यह स्वीकार नहीं करने के लिए बहुत अच्छा है।
टॉम लेहमन

7
हालांकि मूल प्रश्न का उत्तर नहीं है, यह इंगित कर सकता है कि आप अपने ~ / .irbrc में hirb सामान जोड़ सकते हैं ताकि आपको हर बार इसकी आवश्यकता न हो और इसे सक्षम करना पड़े।
जोर्डेलर ऑक्ट

1
यह मणि अब पुरानी हो चुकी है।
अमृत ​​ढुंगना

क्या आउटपुट के कॉलम को "आसानी से" सॉर्ट करने का कोई तरीका है? मैं अंत में कॉलम आईडी को पहले और update_at & create_at होने के लिए मजबूर करना पसंद करूंगा (यदि आप पहले प्रवास के बाद कॉलम जोड़ते हैं तो update_at और निर्मित_at कॉलम अंत में नहीं होंगे)
MrYoshiji

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 / रेल / pry कंसोल के साथ डिफ़ॉल्ट रूप से इसे एकीकृत करने के लिए, अपनी ~/.irbrcया ~/.pryrcफ़ाइल में जोड़ें :

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

1
क्या मैं इस रत्न का प्रयोग रेल्स ४ या ५ के साथ कर सकता हूँ ?? मुझे निम्नलिखित नोट गिथब पृष्ठ में मिला है: नोट: Awesome_print v1.2.0 अंतिम संस्करण है जो रुब संस्करणों को v1.9.3 से पहले और v3.0 से पहले के संस्करणों का समर्थन करता है। आगामी भयानक_प्रिंट v2.0 को रूबी v1.9.3 या बाद में और रेल v3.0 या बाद की आवश्यकता होगी। इसका मतलब यह है कि मणि इन संस्करणों के साथ पुराना है और संघर्ष का कारण बनता है ??
27

12
>> puts ProductColor.all.to_yaml

बस ठीक काम करता है!

स्रोत: https://stackoverflow.com/a/4830096


यह महान काम करता है! मुझे काम करने के लिए अन्य शीर्ष मतदान के जवाब नहीं मिले ... मुझे लगता है कि क्योंकि मैं ActiveResource (एपीआई संसाधन) का उपयोग कर रहा हूं
क्रिमबो

11

यह भी ध्यान दिया जा सकता है कि आप इसका उपयोग कर सकते हैं:

j ProductColor.all.inspect

यमल के बजाय Json प्रारूप में उत्पादन करने के लिए


यह JSON / रूबी के संस्करण के आधार पर विफल हो सकता है, और अच्छे स्वरूपण की आवश्यकता उस वातावरण में हो सकती है जहां एक कैंट में अच्छी चीजें हों
टोड

3
यह त्रुटि बढ़ाता है: JSON :: जेनरेटरइर्र: केवल JSON ऑब्जेक्ट्स या एरेज़ की पीढ़ी
हसन अकरम

8

नमस्ते आप भी अपने स्क्रिप्ट / कंसोल में यह कोशिश कर सकते हैं अगर

>> y ProductColor.all

आपके लिए काम नहीं कर रहा।

इसे इस्तेमाल करे:

>> require 'yaml'

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

फिर

>> y ProductColor.all

7

मुझे यह काम करने में कुछ परेशानी थी, इसलिए मैं अपने दो सेंटों को अपने जेमफाइल में भयानक रूप से जोड़ दूंगा, अधिमानतः :development

gem 'awesome_print', require: 'ap'

फिर

rails console

तुम कर सकते हो

> ap Model.all बस। हालाँकि आप भी जोड़ सकते हैं

require "awesome_print"
AwesomePrint.irb!

आपके ~ / .irbrc के लिए, इस तरह भयानक_प्रिंट की आवश्यकता होगी जब भी आप कंसोल खोलेंगे और आप बस कर सकते हैं

Model.all टाइपिंग एपी की आवश्यकता के बिना


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

जहां उचित हो लाइनब्रीक सम्मिलित करना चाहिए


तथ्य की बात के रूप require 'pp'में संभव नहीं है rails console --sandbox। किसी कारण से मुझे falseआवश्यकता पड़ने पर मिलता है pp। ऊप्स! ऐसा लगता है कि ppपहले से ही डिफ़ॉल्ट रूप से आवश्यक है rails console। मैंने अभी-अभी किया है pp Model.connection_handlerऔर मुझे बड़े सुंदर मुद्रित आउटपुट मिले हैं। धन्यवाद।
ग्रीन

@Green यदि requireवापस आती है false, तो इसका मतलब है कि फ़ाइल पहले ही लोड हो चुकी है।
sepp2k

inspectबस करते समय क्यों नहीं प्रदर्शित किया जाता है ProductColor.all?
अर्नाल्ड रो

3

AwesomePrint का उपयोग करने के लिए Alter Lago के सुझाव में जोड़ने के लिए, यदि आप अपने प्रोजेक्ट के 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'

(यह सुनिश्चित करना कि मार्ग और संस्करण सही हैं, अवश्य)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.