https://github.com/arches/table_print
http://tableprintgem.com/
※日本語が含まれる場合は、幅調整がうまくいかない模様
モデルの関係は以下のようにしておく
[book] belongs_to [author]
[book] has_many [photos]
何も指定しない場合
$ rails c
Loading development environment (Rails 4.0.0)
[1] pry(main)> tp Book.all;
Book Load (0.1ms) SELECT "books".* FROM "books"
ID | NAME | AUTHOR_ID | CREATED_AT | UPDATED_AT
-----------------------------------------------------------------------------
1 | 太郎の本 | 1 | 2013-08-30 09:46:46 | 2013-08-30 09:46:46
2 | 花子の本 | 2 | 2013-08-30 09:46:46 | 2013-08-30 09:46:46
3 | Bob Book | 3 | 2013-08-30 09:46:46 | 2013-08-30 09:46:46
必要項目だけ指定する
tp Book.all, "name", "created_at";
NAME | CREATED_AT
----------------------------------
太郎の本 | 2013-08-30 09:46:46
花子の本 | 2013-08-30 09:46:46
Bob Book | 2013-08-30 09:46:46
belongs_toのデータを取得する
tp Book.includes(:author), "name", "author.name";
NAME | AUTHOR.NAME
----------------------
太郎の本 | 山田太郎
花子の本 | 鈴木花子
Bob Book | Bob
has_manyのデータを取得する
tp Book.includes(:photos), "name", "photos.name"
NAME | PHOTOS.NAME
----------------------
太郎の本 | 太郎の写真(A)
| 太郎の写真(B)
花子の本 | 花子の写真(A)
| 花子の写真(B)
| 花子の写真(C)
Bob Book | Bobの写真(A)
フィールドとして定義されていないものを出す場合
この場合は Bookが保有するphotoの数
以下のように フィールド名: lambda{|u| u.something}
とする
tp Book.all, "name", photo_count: lambda{|u| u.photos.count}
NAME | PHOTO_COUNT
----------------------
太郎の本 | 2
花子の本 | 3
Bob Book | 1
特定のフィールドの日付フォーマットを変更する
tp Book.all, :name, {created_at: {time_format: '%Y-%m-%d'}}
NAME | CREATED_AT
----------------------------------
太郎の本 | 2013-08-30
花子の本 | 2013-08-30
Bob Book | 2013-08-30
なお、通常は30文字で省略されてしまうので、特定のフィールドの表示幅を変更する場合は、
width
オプションを追加する
tp Book.all, {name: {width: 1}}, :created_at
NA... | CREATED_AT
-------------------------------
太郎... | 2013-08-30 09:46:46
花子... | 2013-08-30 09:46:46
Bob Bo... | 2013-08-30 09:46:46
config
tp.set
を使用し、configを設定することも可能
tp.set Book, "name", "author.name", "photos.name"
としておくことで、
tp Book.all
とすると、以下が表示されるようになる。
NAME | AUTHOR.NAME | PHOTOS.NAME
------------------------------------
太郎の本 | 山田太郎 | 太郎の写真(A)
| | 太郎の写真(B)
花子の本 | 鈴木花子 | 花子の写真(A)
| | 花子の写真(B)
| | 花子の写真(C)
Bob Book | Bob | Bobの写真(A)
なお、以下でclearできる
tp.clear Book
AR以外でも利用可能
Classの場合
require 'table_print'
class Foo
attr_accessor :bar, :baz
end
x = [].tap do |m|
m << Foo.new.tap{|n| n.bar = 'bar1' ; n.baz = 'baz1' }
m << Foo.new.tap{|n| n.bar = 'bar2' ; n.baz = 'baz2' }
end
tp x
BAR | BAZ
-----------
bar1 | baz1
bar2 | baz2
Hashの場合
require 'table_print'
x = [{x: 'a', y: 'b'}, {x: 'c', y: 'd'}]
tp x
X | Y
-----
a | b
c | d