Szukam sposobu na zrzucenie struktury obiektu, podobnej do funkcji PHP print_r
i var_dump
do debugowania.
Szukam sposobu na zrzucenie struktury obiektu, podobnej do funkcji PHP print_r
i var_dump
do debugowania.
Odpowiedzi:
W widokach:
include DebugHelper
...your code...
debug(object)
W kontrolerach, modelach i innym kodzie:
puts YAML::dump(object)
Możesz także użyć YAML :: dump shorthand ( y ) w konsoli Rails:
>> 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
>>
Jeśli chcesz po prostu przejrzeć zawartość łańcucha, spróbuj użyć podniesienia (na przykład w modelach, kontrolerach lub innym niedostępnym miejscu). Otrzymujesz ślad za darmo :)
>> raise Rails.root
RuntimeError: /home/marcin/work/github/project1
from (irb):17
>>
Gorąco zachęcam do wypróbowania ruby-debug :
To niezwykle pomocne!
Możesz użyć puts some_variable.inspect
. Lub krótsza wersja: p some_variable
. A dla ładniejszego wydruku możesz użyć klejnotu awesome_print .
Jeśli chcesz tylko, aby odpowiednie dane były wyświetlane na stdout (dane wyjściowe terminala, jeśli korzystasz z wiersza poleceń), możesz użyć p some_object
.
Wcześniejsze odpowiedzi są świetne, ale jeśli nie chcesz używać konsoli (terminala), w Railsach możesz wydrukować wynik w widoku za pomocą pomocnika Debug 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
wyniki (w przeglądarce)
- !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
Używam tego :)
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
Ostatnio używam metody awesome_print , ap
która działa zarówno na konsoli, jak iw widokach.
Kolorowe dane wyjściowe specyficzne dla typu naprawdę robią różnicę, jeśli musisz wizualnie przeskanować String
lub Numeric
obiektów (chociaż musiałem trochę poprawić mój arkusz stylów, aby uzyskać dopracowany wygląd)
puts theobject.inspect.gsub(",", "\n")