Domanda

Voglio ottenere qualcosa del genere per avere un bell'aspetto:

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

Questo non funziona:

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

E nemmeno questo:

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

Pensieri?

È stato utile?

Soluzione

IL y è un modo pratico per ottenere un bel output YAML.

y ProductColor.all

Supponendo che tu sia dentro script/console

Come ha commentato jordanpg, questa risposta è obsoleta.Per Rails 3.2+ è necessario eseguire il seguente codice prima di poter ottenere il file y metodo di lavoro:

YAML::ENGINE.yamler = 'syck'

Da ruby-doc

Nelle versioni Ruby precedenti, ad es.<= 1.9, Syck è ancora fornito, tuttavia è stato completamente rimosso con il rilascio di Ruby 2.0.0.

Per i binari 4/Ruby 2 potresti usare just

puts object.to_yaml

Altri suggerimenti

Dovresti provare hirb . È una gemma creata per formattare oggetti nella console ruby. La tua sessione di script / console sarebbe simile a questa:

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

Puoi saperne di più su hirb nella sua homepage .

Impressionante stampa è bello anche se vuoi un oggetto rientrato. Qualcosa del tipo:

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

Per integrarlo per impostazione predefinita con la tua console irb / rails / pry, aggiungi al tuo ~/.irbrc o ~/.pryrc file:

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

Si può anche notare che è possibile utilizzare:

j ProductColor.all.inspect

per l'output in formato Json anziché Yaml

>> puts ProductColor.all.to_yaml

Funziona semplicemente bene!

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

Ciao, puoi anche provare questo nel tuo script / console se

>> y ProductColor.all

non funziona per te.

Prova questo:

>> require 'yaml'

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

quindi

<*>

Ho avuto qualche problema a farlo funzionare, quindi aggiungerò i miei due centesimi a awesome_print aggiungilo al tuo Gemfile, preferibilmente in :development

gem 'awesome_print', require: 'ap'

quindi in

rails console

puoi farlo

> ap Model.all Questo è tutto. Tuttavia puoi anche aggiungere

require "awesome_print"
AwesomePrint.irb!

sul tuo ~ / .irbrc, in questo modo sarà richiesto awesome_print ogni volta che apri la console e puoi semplicemente farlo

Model.all senza la necessità di digitare ap

Usa irbtools gemma.

Formatterà automaticamente l'output della console e otterrai tantissime fantastiche funzionalità.

Potresti voler definire il metodo di ispezione di ProductColor per restituire qualcosa che ritieni carino. Ad esempio:

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

Dopo di che il risultato di ProductColor.all verrà visualizzato come qualcosa di simile a [< 1 - Bianco (bianco) > ;, ...]. Ovviamente dovresti adattare il metodo inspect alle tue esigenze, in modo che mostri tutte le informazioni di cui hai bisogno in uno stile che ti piace.

Modifica: anche se il problema era la mancanza di interruzioni di linea nell'output, potresti provare

require 'pp'
pp ProductColor.all

che dovrebbe inserire interruzioni di riga dove appropriato

Per aggiungere al suggerimento di Alter Lago per l'utilizzo di AwesomePrint, Se non puoi / non dovresti / non vuoi aggiungere la gemma awesome_print al Gemfile del tuo progetto, fai questo:

gem install awesome_print

Modifica ~ / .irb.rc e aggiungi questo:

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

(Accertandosi che il percorso e la versione siano corretti, ovviamente)

Puoi anche provare quanto segue per un gruppo di oggetti

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

Questo ti darà un output molto migliore , come

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

Chiamare to_yaml sugli attributi anziché sull'oggetto stesso ti salva dalla visualizzazione dell'intero contenuto dell'oggetto nell'output

O puts Object.last.attributes.to_yaml per un singolo oggetto

È disponibile anche una scorciatoia: y Object.last.attributes

Penso che questa soluzione sia la più accurata. Dovresti provare questo:

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

Questo ti darà un output super bello rispetto al formato 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"
  }
]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top