如何使用 Rails 控制台(Rails 6.1.7.2/Ruby 3.1.2)删除多行输出?

问题描述 投票:0回答:2

升级到 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 风格?

ruby-on-rails ruby irb
2个回答
1
投票

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>

0
投票
# ~/.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
:
https://docs.ruby-lang.org/en/3.2/IRB/Inspector.html

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))
}
© www.soinside.com 2019 - 2024. All rights reserved.