如何在Rails控制台中获得漂亮的格式

我想要这样看起来不错:

>> ProductColor.all => [#<ProductColor id: 1, name: "White", internal_name: "White", created_at: "2009-06-10 04:02:44", updated_at: "2009-06-10 04:02:44">, #<ProductColor id: 2, name: "Ivory", internal_name: "Ivory", created_at: "2009-06-10 04:02:44", updated_at: "2009-06-10 04:02:44">, #<ProductColor id: 3, name: "Blue", internal_name: "Light Blue", created_at: "2009-06-10 04:02:44", updated_at: "2009-06-10 04:02:44">, #<ProductColor id: 4, name: "Green", internal_name: "Green", created_at: "2009-06-10 04:02:44", updated_at: "2009-06-10 04:02:44">] 

这不起作用:

 >> ProductColor.all.inspect => "[#<ProductColor id: 1, name: \"White\", internal_name: \"White\", created_at: \"2009-06-10 04:02:44\", updated_at: \"2009-06-10 04:02:44\">, #<ProductColor id: 2, name: \"Ivory\", internal_name: \"Ivory\", created_at: \"2009-06-10 04:02:44\", updated_at: \"2009-06-10 04:02:44\">, #<ProductColor id: 3, name: \"Blue\", internal_name: \"Light Blue\", created_at: \"2009-06-10 04:02:44\", updated_at: \"2009-06-10 04:02:44\">, #<ProductColor id: 4, name: \"Green\", internal_name: \"Green\", created_at: \"2009-06-10 04:02:44\", updated_at: \"2009-06-10 04:02:44\">]" 

这也不是:

 >> ProductColor.all.to_yaml => "--- \n- !ruby/object:ProductColor \n attributes: \n name: White\n created_at: 2009-06-10 04:02:44\n updated_at: 2009-06-10 04:02:44\n id: \"1\"\n internal_name: White\n attributes_cache: {}\n\n- !ruby/object:ProductColor \n attributes: \n name: Ivory\n created_at: 2009-06-10 04:02:44\n updated_at: 2009-06-10 04:02:44\n id: \"2\"\n internal_name: Ivory\n attributes_cache: {}\n\n- !ruby/object:ProductColor \n attributes: \n name: Blue\n created_at: 2009-06-10 04:02:44\n updated_at: 2009-06-10 04:02:44\n id: \"3\"\n internal_name: Light Blue\n attributes_cache: {}\n\n- !ruby/object:ProductColor \n attributes: \n name: Green\n created_at: 2009-06-10 04:02:44\n updated_at: 2009-06-10 04:02:44\n id: \"4\"\n internal_name: Green\n attributes_cache: {}\n\n" 

思考?

y方法是获得一些漂亮的YAML输出的一个方便的方法。

 y ProductColor.all 

假设你在script/console

正如jordanpg所评论的,这个答案已经过时了。 对于Rails 3.2+,您需要执行下面的代码,然后才能使y方法工作:

 YAML::ENGINE.yamler = 'syck' 

从ruby文档

在较旧的Ruby版本中,即。 <= 1.9,Syck仍然提供,但是随着Ruby 2.0.0的发布,它完全被删除了。

对于轨道4 /ruby2,你可以使用

 puts object.to_yaml 

你应该试试hirb 。 这是一个gem,以相当格式的对象在ruby控制台。 您的脚本/控制台会话将如下所示:

 >> require 'hirb' => true >> Hirb.enable => true >> ProductColor.first +----+-------+---------------+---------------------+---------------------+ | id | name | internal_name | created_at | updated_at | +----+-------+---------------+---------------------+---------------------+ | 1 | White | White | 2009-06-10 04:02:44 | 2009-06-10 04:02:44 | +----+-------+---------------+---------------------+---------------------+ 1 row in set => true 

您可以在其主页上了解更多关于hirb的信息。

如果你想要一个对象缩进, 真棒打印也不错。 就像是:

 $ rails console rails> require "awesome_print" rails> ap Account.all(:limit => 2) [ [0] #<Account:0x1033220b8> { :id => 1, :user_id => 5, :assigned_to => 7, :name => "Hayes-DuBuque", :access => "Public", :website => "http://www.hayesdubuque.com", :toll_free_phone => "1-800-932-6571", :phone => "(111)549-5002", :fax => "(349)415-2266", :deleted_at => nil, :created_at => Sat, 06 Mar 2010 09:46:10 UTC +00:00, :updated_at => Sat, 06 Mar 2010 16:33:10 UTC +00:00, :email => "info@hayesdubuque.com", :background_info => nil }, [1] #<Account:0x103321ff0> { :id => 2, :user_id => 4, :assigned_to => 4, :name => "Ziemann-Streich", :access => "Public", :website => "http://www.ziemannstreich.com", :toll_free_phone => "1-800-871-0619", :phone => "(042)056-1534", :fax => "(106)017-8792", :deleted_at => nil, :created_at => Tue, 09 Feb 2010 13:32:10 UTC +00:00, :updated_at => Tue, 09 Feb 2010 20:05:01 UTC +00:00, :email => "info@ziemannstreich.com", :background_info => nil } ] 

要将其默认与irb / rails ~/.irbrc控制台集成,请添加到~/.irbrc~/.pryrc文件中:

 require "awesome_print" AwesomePrint.irb! # just in .irbrc AwesomePrint.pry! # just in .pryrc 

也可以注意到,你可以使用:

 j ProductColor.all.inspect 

以Json格式输出而不是Yaml

 >> puts ProductColor.all.to_yaml 

简单地工作正常!

来源: https : //stackoverflow.com/a/4830096

嗨,你也可以尝试在你的脚本/控制台,如果

 >> y ProductColor.all 

不为你工作。

尝试这个:

 >> require 'yaml' >> YAML::ENGINE.yamler = 'syck' 

然后

 >> y ProductColor.all 

使用irbtoolsgem。

它会自动格式化控制台的输出,你会得到很多很棒的function。

我有一些麻烦使它的工作,所以我会增加我的两分钱awesome_print添加到您的Gemfile,最好在:development

gem 'awesome_print', require: 'ap'

然后进入

rails console

你可以做

> ap Model.all就是这样。 但是你也可以添加

 require "awesome_print" AwesomePrint.irb! 

到你的〜/ .irbrc,这样awesome_print将会在你打开控制台的时候需要,你可以简单的做

Model.all而不需要键入ap

你可能想要定义ProductColor的inspect方法来返回你觉得很好的东西。 例如:

 def inspect "<#{id} - #{name} (#{internal_name})>" end 

之后,ProductColor.all的结果将显示为[<1- – White(White)>,…]。 当然,您应该根据需要调整检查方法,以便按照您喜欢的风格显示所需的所有信息。

编辑:如果问题是缺less输出中的换行符,您可以尝试

 require 'pp' pp ProductColor.all 

应在适当的地方插入换行符

要添加Alter Lago的关于使用AwesomePrint的build议,如果您不能/不应该/不想将awesome_print gem添加到项目的Gemfile中,请执行以下操作:

gem install awesome_print

编辑〜/ .irb.rc并添加:

$LOAD_PATH << '/Users/your-user/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/gems/1.9.1/gems/awesome_print-1.1.0/lib'

require 'awesome_print'

(当然,确保path和版本是正确的)

您也可以尝试以下一组对象

 Object.all.map(&:attributes).to_yaml 

这会给你更好的输出,比如

 --- id: 1 type: College name: University of Texas --- id: 2 type: College name: University of California 

在属性上调用to_yaml而不是对象本身to_yaml在输出中查看对象的全部内容

或者puts Object.last.attributes.to_yaml一个对象中

速记也可用: y Object.last.attributes