升级到 Rails 6.1.7.2 和 Ruby 3.1.2 后,ActiveRecords 在 Rails 控制台输出中的显示方式让我很恼火。基本上,每条记录的属性和值一次显示一行。例如,
Car.first
输出:
3.1.2 :001 > Car.first
Car Load (7.0ms) SELECT "cars".* FROM "cars" ORDER BY "cars"."id" ASC LIMIT $1 [["LIMIT", 1]]
=>
#<Car:0x000000010e8d6fd0
id: 13,
user_id: 1,
track_id: 7,
car_number: "979754",
car_initial: "rofl",
door_type: "Sealsafe",
car_type: "Tri",
shipper: "GMOT",
pretrip_only: false,
date_created: Sat, 16 Jul 2022 21:03:07.246098000 UTC +00:00,
date_updated: nil,
updated_by: nil,
scoring_inspector_id: "65",
scoring_rack_score_job_code_6036_why_made: "21",
scoring_rack_score_stenciling_job_code_6037_why_made: "09",
scoring_roof: "3",
scoring_side_screens: "3",
scoring_shear_bay_exterior: "4",
scoring_exterior_door: "4",
scoring_top_of_deck: "4",
scoring_underside_of_deck: "4",
scoring_side_posts_interior: "3",
scoring_shear_bay_interior: "1",
scoring_door_interior: "3",
created_at: Wed, 20 Jul 2022 21:56:24.987715000 UTC +00:00,
updated_at: Tue, 26 Jul 2022 21:03:07.290183000 UTC +00:00,
expressyard_id: 1860065,
last_expressyard_sync_attempt_error: "",
last_expressyard_sync_attempt_params: nil,
client_created_at: nil>
这迫使我过度滚动。在我升级之前,我使用的是 2.7.3,整个记录将打印在一行上,但我的 IDE (RubyMine) 会将文本换行。我怎样才能用 3.1.2 回到 2.7.3 风格?
https://github.com/rails/rails/pull/15172 引入了新的行为,但是“冗长”的风格现在变得越来越流行,所以尝试这可能是一场失败的战斗并与之抗争。我个人建议您给每行价值格式更多时间,它可能会在您身上成长!
但也许您可以使用 AwesomePrint 或更易于维护的分支 AmazingPrint 来自定义您的输出并达到真正的调试 Nirvana。
# Gemfile
gem 'amazing_print'
# .irbrc
require "amazing_print"
AmazingPrint.irb!
# ~/.config/aprc
AmazingPrint.defaults = {
multiline: false,
ruby19_syntax: true
}
这会产生如下输出:
irb(main):001:0> Bar.new
#<Bar:0x000000012da31050> { id: nil, thing: nil, t1: nil, t2: nil, t3: nil, t4: nil, t5: nil, t6: nil, t7: nil, t8: nil, t9: nil, this_is_a_really_long_attribute: nil, created_at: nil, updated_at: nil }
与之前相比:
irb(main):005:0> Bar.new
=>
#<Bar:0x00000001099cc7c8
id: nil,
thing: nil,
t1: nil,
t2: nil,
t3: nil,
t4: nil,
t5: nil,
t6: nil,
t7: nil,
t8: nil,
t9: nil,
this_is_a_really_long_attribute: nil,
created_at: nil,
updated_at: nil>
# ~/.irbrc
IRB.conf[:INSPECT_MODE] = :p
此处显示的配置设置:
https://docs.ruby-lang.org/en/3.2/IRB.html#module-IRB-label-Configuration
这里解释:
https://docs.ruby-lang.org/en/3.2/IRB/Context.html#method-i-inspect_mode-3D
哪个链接到可用的检查员 -
:pp
, :yaml
, :marshal
:Docs,我说得对吗:
https://github.com/ruby/irb/blob/v1.6.4/lib/irb/inspector.rb#L112
# vv
Inspector.def_inspector([:p, :inspect]){|v|
Color.colorize_code(v.inspect, colorable: Color.colorable? && Color.inspect_colorable?(v))
}