【问题标题】:How can I print each element of an array on its own line in the Rails console?如何在 Rails 控制台中单独打印数组的每个元素?
【发布时间】:2014-01-12 07:26:43
【问题描述】:

当我运行 Rails 控制台时,如何在单独的行中显示每个项目?而不是

> Post.all
=> #<ActiveRecord::Relation [#<Post id: 1, title: "Post #0", comment: nil, link: "http://yahoo.com", user_id: 1, created_at: "2013-09-30 02:29:28", updated_at: "2013-09-30 02:29:28">, #<Post id: 2, title: "Post #1", comment: nil,...

它会显示为

> Post.all
=> #<ActiveRecord::Relation [
#<Post id: 1, title: "Post #0", comment: nil, link: "http://yahoo.com", user_id: 1, created_at: "2013-09-30 02:29:28", updated_at: "2013-09-30 02:29:28">, 
#<Post id: 2, title: "Post #1", comment: nil,...

类似于 Perl 调试器中的x。我试过了

Post.all.each{|e| e.inspect + "\n"}

但这只会让事情变得更糟,而且不是很方便。

我看到了Ruby on Rails: pretty print for variable.hash_set.inspect ... is there a way to pretty print .inpsect in the console?https://github.com/michaeldv/awesome_print

但这似乎不起作用

irb(main):005:0> require "awesome_print"
=> false
irb(main):006:0> ap Post.all
#<ActiveRecord::Relation [#<Post id: 1, title: "Post #0",

【问题讨论】:

  • 请注意,Post.all 不会返回一个数组,而是一个 ActiveRecord::Relation。对于真正的Array,您需要#to_a

标签: ruby-on-rails ruby rails-console


【解决方案1】:

试试:

Post.all.each {|e| puts e.inspect }

这里需要注意的是puts 函数会在语句后自动添加一个换行符,如果您改为使用print,它将以与puts 类似的方式运行,而末尾没有换行符。


如果您使用 awesome_print,请尝试:

ap Post.all.to_a

此外,当您发出第一个命令时,输出将在末尾重复(根据您的评论)以显示当前表达式的输出。您可以通过在命令末尾附加 ;(分号)来抑制它,如下所示:

Post.all.each { |e| puts e.inspect };

【讨论】:

  • 这行得通,但它在最后重复自己,没有换行符,所有一行。这就是它的样子:pastie.org/private/zy88frmnslbtpkvfowupxq
  • 谢谢,ap Post.all.to_a 工作!颜色不少!
  • 分号技巧似乎不适用于 Rails 4。它似乎忽略了整个语句。但这有效:Post.all.each { |e| puts e.inspect };1 最后打印一个 1。
  • @Chloe:应该可以。 semi-colon 将抑制整个表达式/命令的输出。因此,如果您的命令显式打印了某些内容,即使使用 ; 也会打印出来。尝试在控制台中运行:puts "help" vs puts "help";
【解决方案2】:

试试:

> puts Post.all.map(&:inspect).join("\n")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 2012-10-04
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多