如何配置Rails控制台使其像Rails6一样显示Model对象完整属性
问题场景
在pry控制台执行如下命令查询第一条User记录:
[68] pry(main)> User.first
控制台仅返回带内存地址的对象标识,未展示具体属性:
=> #<User:0x411f4>
需要配置Rails/Ruby环境,恢复Rails 6版本的默认展示效果:直接返回模型对象的所有属性键值对,期望显示效果如下:
=> #<User id: 166, email: "hello@statecert.com", created_at: "2021-10-05 15:46:44.248514000 +0000", updated_at: "2021-10-05 15:47:22.193199000 +0000", first_name: "Danika", last_name: "LeBlanc", notes: nil >
解决方案
按以下步骤排查配置即可恢复默认展示效果:
检查Rails的属性检查配置
Rails 6+ 提供了attributes_for_inspect配置项控制控制台输出的模型属性范围,打开项目配置文件,确认没有把该值设为空:# config/application.rb 或者对应环境配置文件(如config/environments/development.rb) # 配置为:all表示展示所有属性,不要设置为[]空数组 config.active_record.attributes_for_inspect = :all修改配置后重启pry控制台,执行
User.first.inspect验证,如果能正常返回带属性的字符串,说明问题出在pry的打印逻辑层。修复pry打印逻辑覆盖问题
pry默认的打印格式化逻辑会覆盖ActiveRecord原生的inspect输出,在项目根目录新建/修改.pryrc文件,添加如下配置,让ActiveRecord对象走原生inspect逻辑,其余对象保持pry默认格式化:if defined?(ActiveRecord::Base) Pry.config.print = proc do |output, value, _pry_| case value when ActiveRecord::Base, ActiveRecord::Relation output.puts value.inspect else Pry::ColorPrinter.pp(value, output) end end end排查第三方格式化gem的影响
如果项目中引入了pry-awesome_print、amazing_print这类自定义对象打印的gem,这类gem默认会重写ActiveRecord对象的输出格式,可在.pryrc中添加配置关闭对ActiveRecord对象的格式化接管:# 若使用awesome_print/amazing_print if defined?(AwesomePrint) AwesomePrint.defaults = { active_record: false } end配置完成后重启pry控制台即可生效。
内容的提问来源于stack exchange,提问作者isethi
相关产品推荐
相关产品推荐

