如何在Rails 6.1.7.2/Ruby 3.1.2控制台取消多行输出?
问题
升级至Rails 6.1.7.2和Ruby 3.1.2后,Rails控制台中ActiveRecord记录的输出变为逐行显示属性和值,执行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>
此前使用Ruby 2.7.3时,记录会以单行打印,IDE(RubyMine)会自动换行,现在需要恢复该样式。
解决方案
临时生效(当前控制台会话)
在Rails控制台中执行以下命令,切换ActiveRecord的输出格式化方法:
ActiveRecord::Base.inspect_method = :inspect
执行后再次查询Car.first,记录就会以单行形式输出,由IDE自动换行。
永久生效(所有控制台会话)
- 若项目根目录下不存在
config/initializers/console.rb,则新建该文件 - 在文件中添加以下代码:
if defined?(Rails::Console) ActiveRecord::Base.inspect_method = :inspect end
- 保存文件后重启Rails控制台,设置即可永久生效。
原理
Ruby 3.1+搭配Rails 6.1.x时,ActiveRecord默认使用#pretty_inspect方法格式化输出,导致属性逐行展示。而#inspect方法会将记录输出为单行,和旧版本行为一致。
内容的提问来源于stack exchange,提问作者JoshingYou
相关产品推荐
相关产品推荐

