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다른 콘솔 도구 또는 콘솔의 다른 구성에 액세스 할 수없는 상황 (예 : 프로덕션 컨테이너 / 서버에 대한 제한된 액세스 권한을 가진 계약 개발자)에 적용되기 때문에 가장 좋은 대답 입니다 )
Todd

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의 대답은 기본적으로 내가 찾던 것이지만 받아 들일 수없는 너무 시원합니다.
톰 레먼

7
원래 질문에 대한 답변은 아니지만 ~ / .irbrc에 hirb 항목을 추가하여 매번 요구하거나 활성화 할 필요가 없다는 것을 지적 할 수 있습니다.
jordelver

1
이 보석은 지금 구식입니다.
Amrit Dhungana

출력 열을 "쉽게"정렬하는 방법이 있습니까? 마지막에 열 ID를 first 및 updated_at & created_at로 강제 설정하고 싶습니다 (첫 번째 마이그레이션 후 열을 추가하면 updated_at & created_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 / rails / pry 콘솔과 통합하려면 ~/.irbrc또는 ~/.pryrc파일에 추가 하십시오.

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

1
이 보석을 Rails 4 또는 5와 함께 사용할 수 있습니까 ?? github 페이지에서 다음 참고 사항을 찾았습니다. 참고 : awesome_print v1.2.0은 v1.9.3 이전의 Ruby 버전과 v3.0 이전의 Rails 버전을 지원하는 마지막 릴리스입니다. 다가오는 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

Yaml 대신 Json 형식으로 출력


이것은 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에 2 센트를 추가 할 것입니다 .Gemfile에 이것을 추가하십시오. :development

gem 'awesome_print', require: 'ap'

그런 다음

rails console

넌 할 수있어

> ap Model.all 그게 다야. 그러나 당신은 또한 추가 할 수 있습니다

require "awesome_print"
AwesomePrint.irb!

~ / .irbrc에 콘솔을 열 때마다 awesome_print가 필요하며 간단하게 할 수 있습니다.

ap를 입력하지 않아도 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의 inspect 메소드를 정의 할 수 있습니다. 예를 들면 다음과 같습니다.

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

그 후 ProductColor.all의 결과는 [<1-White (White)>, ...]와 같은 것으로 표시됩니다. 물론 원하는 방식으로 필요한 모든 정보를 표시 할 수 있도록 inspect 방법을 필요에 맞게 조정해야합니다.

편집 : 또한 문제가 출력에서 ​​줄 바꿈이 부족한 경우 시도해 볼 수 있습니다

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않습니까?
Arnold Roa 2016 년

3

AwesomePrint 사용에 대한 Alter Lago의 제안에 추가하려면, 프로젝트의 Gemfile에 awesome_print gem을 추가 할 수 없거나 /하지 않아야 할 경우 :

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.