停止 Rails 控制台在循环结束时打印对象

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

如果我循环遍历给定模型的所有实例并从每个实例输出一些内容,最后 irb 仍将打印整个对象。

如果对象最终占用了数百行,那么在我看到我真正想要的东西之前,还有很长的路要走。有没有办法在 Rails 控制台中禁用此功能?

ruby-on-rails ruby console irb
4个回答
126
投票

如果您一般不想禁用回显,您也可以在一个命令行中调用多个表达式。仅显示最后一个表达式的输出。

big_result(input); 0

108
投票

调用

conf.echo = false
,不会打印返回值。这适用于任何 irb 会话,而不仅仅是 Rails 控制台。

如果您想使其永久化,请将其添加到您的 irb 配置中。

echo 'IRB.conf[:ECHO] = false' >> $HOME/.irbrc

49
投票

Ruby 3.3 更新: 作为

irb
改进的一部分,我们现在可以使用
;

省略返回值

参考:https://blog.saeloun.com/2024/02/12/what-is-new-in-ruby-3-3/

要暂时停止控制台打印返回值,您可以在循环或函数末尾但在按 return 之前发出

nil
语句。

record.each do |r|
  puts r.properties
end; nil

或者如果您想减少打字,它也可以是数字。但在场景中它可能会令人困惑,我无法想象。

record.each do |r|
  puts r.properties
end; 0

4
投票

这让我很沮丧,因为我使用的是

pry-rails
gem,某些解决方案对我不起作用。

所以这里是分两步进行的:

  1. 只需将
    ;
    添加到最后一个命令的末尾就足以使打印输出静音。
  2. 它可能仍然会打印执行的sql。所以为了让它安静下来,用
  3. 包围它
ActiveRecord::Base.logger.silence do
  # code here
end

示例

如果你想运行这个

User.all do |user|
  puts user.first_name
end

然后这将确保没有其他内容打印到屏幕上:

ActiveRecord::Base.logger.silence do
  User.all do |user|
    puts user.first_name
  end
end;

(别忘了最后的

;

© www.soinside.com 2019 - 2024. All rights reserved.