web-dev-qa-db-ja.com

Ruby / Ruby on Railsに同等のprint_rまたはvar_dumpがありますか?

PHP functions print_rおよびvar_dumpデバッグの理由。

104
Daniel Rikowski

フォーマットするオブジェクトの.inspectメソッドは、表示用に正しくなければなりません。

<%= theobject.inspect %>

.methodsメソッドも使用できます:

<%= theobject.methods.inspect %>

データに応じて、<pre>タグに配置すると役立つ場合があります

128
dbr

ビューで:

include DebugHelper

...your code...

debug(object)

コントローラー、モデル、およびその他のコード:

puts YAML::dump(object)

ソース

64

ビューでは、データのYAMLビューを生成する<%= debug(yourobject) %>を使用できます。ログに何かが必要な場合は、logger.debug yourobject.inspect

8
ujh

YAML :: dumpshorthand(y)=の下でも使用できますRails console:

>> y User.first
--- !Ruby/object:User 
attributes: 
  created_at: 2009-05-24 20:16:11.099441
  updated_at: 2009-05-26 22:46:29.501245
  current_login_ip: 127.0.0.1
  id: "1"
  current_login_at: 2009-05-24 20:20:46.627254
  login_count: "1"
  last_login_ip: 
  last_login_at: 
  login: admin
attributes_cache: {}

=> nil
>> 

一部の文字列コンテンツをプレビューする場合は、raiseを使用してみてください(たとえば、モデル、コントローラー、またはその他のアクセスできない場所)。バックトレースは無料で入手できます:)

>> raise Rails.root
RuntimeError: /home/marcin/work/github/project1
    from (irb):17
>> 

また、Ruby-debugを試してみることを強くお勧めします。

とても助かります!

6
Marcin Urbanski

puts some_variable.inspectを使用できます。または、短いバージョン:p some_variable。よりきれいな出力には、 awesome_print gem を使用できます。

5
Trantor Liu

関連データをstdout(コマンドラインから実行している場合は端末出力)に表示するだけの場合は、p some_objectを使用できます。

3
Mikoangelo

前の答えは素晴らしいですが、コンソール(ターミナル)を使用したくない場合は、Railsで、デバッグのヘルパーを使用してビューに結果を出力できます ActionView :: Helpers :: DebugHelper

#app/view/controllers/post_controller.rb
def index
 @posts = Post.all
end

#app/view/posts/index.html.erb
<%= debug(@posts) %>

#start your server
Rails -s

結果(ブラウザ内)

- !Ruby/object:Post
  raw_attributes:
    id: 2
    title: My Second Post
    body: Welcome!  This is another example post
    published_at: '2015-10-19 23:00:43.469520'
    created_at: '2015-10-20 00:00:43.470739'
    updated_at: '2015-10-20 00:00:43.470739'
  attributes: !Ruby/object:ActiveRecord::AttributeSet
    attributes: !Ruby/object:ActiveRecord::LazyAttributeHash
      types: &5
        id: &2 !Ruby/object:ActiveRecord::Type::Integer
          precision: 
          scale: 
          limit: 
          range: !Ruby/range
            begin: -2147483648
            end: 2147483648
            excl: true
        title: &3 !Ruby/object:ActiveRecord::Type::String
          precision: 
          scale: 
          limit: 
        body: &4 !Ruby/object:ActiveRecord::Type::Text
          precision: 
          scale: 
          limit: 
        published_at: !Ruby/object:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter
          subtype: &1 !Ruby/object:ActiveRecord::Type::DateTime
            precision: 
            scale: 
            limit: 
        created_at: !Ruby/object:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter
          subtype: *1
        updated_at: !Ruby/object:ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter
          subtype: *1

最近、私はawesome_printapメソッドを使用しています。これは、コンソールだけでなくビューでも機能します。

StringまたはNumericオブジェクトを視覚的にスキャンする必要がある場合、タイプ固有の色付き出力は実際に違いを生じます(ただし、洗練された外観を得るためにスタイルシートを少し調整する必要がありました)

0
Daniel Rikowski

私はこれを使用します:)

require 'yaml'

module AppHelpers
  module Debug
    module VarDump

      class << self

        def dump(dump_object, file_path)
          File.open file_path, "a+" do |log_file|
            current_date = Time.new.to_s + "\n" + YAML::dump(dump_object) + "\n"
            log_file.puts current_date
            log_file.close
          end
        end

      end

    end
  end
end
0
Pawel Barcik

最近、私は [〜#〜] pry [〜#〜] のファンになりました。変数の検査、実行中のコードのデバッグ、外部コードの検査などを行うために信じられないほど見つけました。この特定の質問に対する答えとしては、少しやり過ぎかもしれません。

0