🐕
Rails 7.1 から ActiveRecord::Relation を pp で出力する場合に10件しか出力されなくなった件について
タイトルの通りなんですが ActiveRecord::Relation を pp や p で出力する際にいつの間にか10件までしか出力されなくなっていました。
(1..20).each { User.create(name: "name:#{_1}") }
# 本来は20件分すべてが出力されれてほしいがなぜか10件までしか出力されない…
pp User.all
# => [#<User:0x00007f5ce87d94d8 id: 1, name: "name:1", email: nil, age: nil>,
# #<User:0x00007f5ce87d9398 id: 2, name: "name:2", email: nil, age: nil>,
# #<User:0x00007f5ce87d9118 id: 3, name: "name:3", email: nil, age: nil>,
# #<User:0x00007f5ce87d8fd8 id: 4, name: "name:4", email: nil, age: nil>,
# #<User:0x00007f5ce87d8d58 id: 5, name: "name:5", email: nil, age: nil>,
# #<User:0x00007f5ce87d8c18 id: 6, name: "name:6", email: nil, age: nil>,
# #<User:0x00007f5ce87d8ad8 id: 7, name: "name:7", email: nil, age: nil>,
# #<User:0x00007f5ce87d8998 id: 8, name: "name:8", email: nil, age: nil>,
# #<User:0x00007f5ce87d8858 id: 9, name: "name:9", email: nil, age: nil>,
# #<User:0x00007f5ce87d85d8 id: 10, name: "name:10", email: nil, age: nil>,
# "..."]
これ、いつから変わったのかを調べてみたらどうやら Rails 7.1 から以下の対応で制限がされるようになったみたいですね。
確かにデバッグとかで1000件とか出力されても困るので制限があるのはいいんですが、とはいえ10件程度だと少なすぎるのでもっと出力されてほしい…。
ただ、実装を見る限りは『10件』という件数はハードコーディングされているので外側からは制御できないみたいなんですよねえ。
module ActiveRecord
class Relation
# 実際の出力はこういう実装になっている
def pretty_print(pp)
subject = loaded? ? records : annotate("loading for pp")
entries = subject.take([limit_value, 11].compact.min)
entries[10] = "..." if entries.size == 11
pp.pp(entries)
end
end
end
このあたりは外側から制御できるようにしてほしいうーん…。
一応 #to_a で配列に変換してから出力すればすべてのレコードが出力はされるけどめんどくさいなあ。
pp User.all.to_a
# => [#<User:0x00007d8f6e3293a0 id: 1, name: "name:1", email: nil, age: nil>,
# #<User:0x00007d8f6e329260 id: 2, name: "name:2", email: nil, age: nil>,
# #<User:0x00007d8f6e328fe0 id: 3, name: "name:3", email: nil, age: nil>,
# #<User:0x00007d8f6e328ea0 id: 4, name: "name:4", email: nil, age: nil>,
# #<User:0x00007d8f6e328c20 id: 5, name: "name:5", email: nil, age: nil>,
# #<User:0x00007d8f6e328ae0 id: 6, name: "name:6", email: nil, age: nil>,
# #<User:0x00007d8f6e3289a0 id: 7, name: "name:7", email: nil, age: nil>,
# #<User:0x00007d8f6e328860 id: 8, name: "name:8", email: nil, age: nil>,
# #<User:0x00007d8f6e328720 id: 9, name: "name:9", email: nil, age: nil>,
# #<User:0x00007d8f6e3284a0 id: 10, name: "name:10", email: nil, age: nil>,
# #<User:0x00007d8f6e328360 id: 11, name: "name:11", email: nil, age: nil>,
# #<User:0x00007d8f6e328220 id: 12, name: "name:12", email: nil, age: nil>,
# #<User:0x00007d8f6e3280e0 id: 13, name: "name:13", email: nil, age: nil>,
# #<User:0x00007d8f6e327fa0 id: 14, name: "name:14", email: nil, age: nil>,
# #<User:0x00007d8f6e327e60 id: 15, name: "name:15", email: nil, age: nil>,
# #<User:0x00007d8f6e327d20 id: 16, name: "name:16", email: nil, age: nil>,
# #<User:0x00007d8f6e327be0 id: 17, name: "name:17", email: nil, age: nil>,
# #<User:0x00007d8f6e327aa0 id: 18, name: "name:18", email: nil, age: nil>,
# #<User:0x00007d8f6e327960 id: 19, name: "name:19", email: nil, age: nil>,
# #<User:0x00007d8f6e327820 id: 20, name: "name:20", email: nil, age: nil>]
Discussion