停止rails console在循环结束时打印对象

97
如果我遍历给定模型的所有实例并从每个实例中输出一些内容,最终,irb仍然会打印整个对象。如果对象最终需要数百行,那么在我看到我真正想要的东西之前,这将是一条漫长的路。有没有办法在Rails控制台中禁用这个功能?
4个回答

126

如果你不想完全禁用回显,你也可以在一条命令行中调用多个表达式。只有最后一个表达式的输出会被显示。

big_result(input); 0

3
这实际上就是我想要的。 - dsp_099
5
我经常执行 big_result(input); nil - nroose

107

调用 conf.echo = false 将不会打印返回值。这对于任何irb会话都有效,而不仅限于Rails控制台。

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

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

如果您想要默认情况下始终如此,您会怎么做? - Peter Berg
有没有一种方法可以临时设置它(仅在当前控制台会话中)? - stevec
在Rails控制台中运行conf.echo = false会出现NameError: undefined local variable or method 'conf' for main:Object from (pry):6:in '<main>'的错误。 - stevec
1
@stevec 我想知道这是不是因为你在使用 pry。 - lulalala
@lulalala 我刚刚检查了一个安装了 pry-rails gem 的应用和一个没有安装的应用,并在 Rails 控制台中运行了 conf.echo = false,在没有安装 pry-rails 的应用中可以正常工作,而在安装了 pry-rails 的应用中则无法正常工作。我想知道是否有适用于使用 pry 的应用程序的等效方法? - stevec
显示剩余2条评论

49

如果你想暂时停止控制台打印返回值,可以在循环或函数末尾但在按下返回键之前发出nil语句。

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

如果您想减少输入,它也可以是一个数字。但在某些情况下,可能会令人困惑,而这些情况我无法想象。

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

你是最棒的! - sickrandir

3
这让我很沮丧,因为我正在使用pry-rails gem,有些解决方案对我无效。
以下是两个步骤的解决方法:
  1. 在最后一个命令的末尾添加;就足以使输出静音。
  2. 它可能仍然会打印执行的sql语句。所以要用以下代码将其静音:
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;

(在最后不要忘记;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接