【问题标题】:Stop rails console from printing out the object at the end of a loop停止 rails 控制台在循环结束时打印出对象
【发布时间】:2012-10-28 08:50:21
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails ruby console irb


    【解决方案1】:

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

    big_result(input); 0
    

    【讨论】:

    • 这其实是我想要的。
    • 我经常做big_result(input); nil
    【解决方案2】:

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

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

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

    【讨论】:

    • 如果您希望始终保持默认设置,您会怎么做?
    • @Accipheran 我想把它放在 Rails 初始化程序中会起作用。
    • 感谢您的回复,我实际上发现只需在我的 .irbrc 文件中输入IRB.conf[:ECHO] = false 就可以了。当然,这也会在我所有的 irb 会话中产生回声,但我可以接受。
    • 有没有办法临时设置它(仅在当前控制台会话中)?
    • @stevec 我想知道是不是因为你在使用 pry。
    【解决方案3】:

    要暂时停止控制台打印返回值,您可以在循环或函数结束时发出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;
    

    (不要忘记最后的;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-13
      • 2022-12-05
      • 1970-01-01
      相关资源
      最近更新 更多