137

見栄えを良くするために、次のようなものを取得したい:

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

考え?

4

12 に答える 12

260

このyメソッドは、かなりのYAML出力を取得するための便利な方法です。

y ProductColor.all

あなたがいると仮定してscript/console

jordanpgがコメントしたように、この答えは時代遅れです。yRails 3.2以降の場合、メソッドを機能させる前に、次のコードを実行する必要があります。

YAML::ENGINE.yamler = 'syck'

ruby-docsから

古いRubyバージョンでは、つまり。<= 1.9、Syckは引き続き提供されますが、Ruby2.0.0のリリースで完全に削除されました。

Rails 4 / Ruby 2の場合は、

puts object.to_yaml
于 2009-08-04T02:09:37.093 に答える
102

ハーブを試してみてください。ruby コンソールでオブジェクトを整形するために作られた gem です。スクリプト/コンソール セッションは次のようになります。

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

ハーブの詳細については、ホームページをご覧ください。

于 2009-08-04T06:57:51.693 に答える
33

オブジェクトをインデントしたい場合は、 Awesome printも便利です。何かのようなもの:

$ 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 コンソールに統合するには、~/.irbrcまたは~/.pryrcファイルに次を追加します。

require "awesome_print"
AwesomePrint.irb! # just in .irbrc
AwesomePrint.pry! # just in .pryrc
于 2013-02-28T20:43:01.093 に答える
12
>> puts ProductColor.all.to_yaml

単にうまく動作します!

ソース: https://stackoverflow.com/a/4830096

于 2013-07-31T15:11:33.467 に答える
10

以下を使用できることにも注意してください。

j ProductColor.all.inspect

YamlではなくJson形式で出力する

于 2012-07-24T10:51:58.627 に答える
8

こんにちは、スクリプト/コンソールでこれを試すこともできます

>> y ProductColor.all

あなたのために働いていません。

これを試して:

>> require 'yaml'

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

それから

>> y ProductColor.all
于 2013-05-06T07:41:01.637 に答える
7

私はそれを機能させるのにいくつか問題があったので、私の2セントをawesome_printに追加しますこれをGemfileに追加します。:development

gem 'awesome_print', require: 'ap'

次に

rails console

できるよ

> ap Model.all それでおしまい。ただし、追加することもできます

require "awesome_print"
AwesomePrint.irb!

~/.irbrc に追加すると、コンソールを開くたびに awesome_print が必要になり、簡単に実行できます

ap と入力する必要のない Model.all

于 2015-03-27T17:57:10.967 に答える
5

irbtools宝石を使用。

コンソール出力を自動的にフォーマットし、さらに多くの優れた機能を利用できます。

于 2013-04-22T10:55:25.990 に答える
4

ProductColorのinspectメソッドを定義して、気に入ったものを返すことができます。例えば:

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

その後、ProductColor.allの結果は[<1-白(白)>、...]のように表示されます。もちろん、必要なすべての情報が好きなスタイルで表示されるように、必要に応じて検査方法を調整する必要があります。

編集:また、問題が出力に改行がないことであった場合は、試してみてください

require 'pp'
pp ProductColor.all

必要に応じて改行を挿入する必要があります

于 2009-08-03T20:57:36.170 に答える