如何在Rails控制台中将数组的每个元素单独打印在一行上?

10

当我运行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:漂亮地打印变量.hash_set.inspect...有没有一种方法在控制台中漂亮地打印.inpsect?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 - paradoja
2个回答

18

尝试:

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

需要注意的是,puts函数在语句后自动添加换行符,如果您使用print函数,它会与puts类似,但不会在末尾添加换行符。


如果您正在使用awesome_print,请尝试:

ap Post.all.to_a

此外,当您输入第一个命令时,输出将在末尾重复显示(根据您的注释),以显示当前表达式的输出。您可以通过在命令末尾附加分号;来抑制它,如下所示:
Post.all.each { |e| puts e.inspect };

这个可以工作,但是在结尾重复自己而没有新行,全部在一行上。它看起来像这样:http://pastie.org/private/zy88frmnslbtpkvfowupxq - Chloe
谢谢,ap Post.all.to_a 工作了!而且还有颜色! - Chloe
3
分号技巧似乎在Rails 4中不起作用,它似乎会忽略整个语句。但是这个可以:Post.all.each { |e| puts e.inspect };1,它会在最后打印一个1。 - Chloe
@Chloe:应该可以工作。 分号 将抑制整个表达式/命令的输出。因此,如果您的命令明确打印某些内容,则即使使用 <kbd>;</kbd> 也会打印出来。在控制台中尝试运行:puts "help" vs puts "help"; - Stoic

9

尝试:

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

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