You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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自动换行。

永久生效(所有控制台会话)

  1. 若项目根目录下不存在config/initializers/console.rb,则新建该文件
  2. 在文件中添加以下代码:
if defined?(Rails::Console)
  ActiveRecord::Base.inspect_method = :inspect
end
  1. 保存文件后重启Rails控制台,设置即可永久生效。

原理

Ruby 3.1+搭配Rails 6.1.x时,ActiveRecord默认使用#pretty_inspect方法格式化输出,导致属性逐行展示。而#inspect方法会将记录输出为单行,和旧版本行为一致。

内容的提问来源于stack exchange,提问作者JoshingYou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:17:42