Ich suche nach einer Möglichkeit, die Struktur eines Objekts ähnlich wie bei den PHP-Funktionen print_r
und var_dump
aus Debugging-Gründen zu sichern.
Ich suche nach einer Möglichkeit, die Struktur eines Objekts ähnlich wie bei den PHP-Funktionen print_r
und var_dump
aus Debugging-Gründen zu sichern.
Antworten:
In Ansichten:
include DebugHelper
...your code...
debug(object)
In Steuerungen, Modellen und anderem Code:
puts YAML::dump(object)
Sie können auch YAML :: dump shorthand ( y ) unter der Rails-Konsole verwenden:
>> 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
>>
Wenn Sie wollen einfach nur ein paar String Inhalt der Vorschau anzeigen , versuchen Sie es mit raise (zum Beispiel bei den Modellen, Controller oder einem anderen unzugänglichen Ort). Sie erhalten die Rückverfolgung kostenlos :)
>> raise Rails.root
RuntimeError: /home/marcin/work/github/project1
from (irb):17
>>
Ich ermutige Sie auch wirklich, Ruby-Debug zu versuchen :
Es ist unglaublich hilfreich!
Sie können verwenden puts some_variable.inspect
. Oder die kürzere Version : p some_variable
. Und für eine schönere Ausgabe können Sie das Juwel awesome_print verwenden .
Wenn Sie nur möchten, dass die relevanten Daten in stdout angezeigt werden (die Terminalausgabe, wenn Sie über die Befehlszeile ausgeführt werden), können Sie verwenden p some_object
.
Frühere Antworten sind großartig, aber wenn Sie die Konsole (das Terminal) nicht verwenden möchten, können Sie in Rails das Ergebnis in der Ansicht mit dem Helper ActionView :: Helpers :: DebugHelper des Debugs drucken
#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
Ergebnisse (im Browser)
- !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
Ich benutze das :)
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
In letzter Zeit verwende ich die Methode von awesome_print , ap
die sowohl auf der Konsole als auch in Ansichten funktioniert.
Die typspezifische farbige Ausgabe macht wirklich einen Unterschied , ob man für visuell scannen müssen String
oder Numeric
Gegenstände (Obwohl ich hatte mein Sheet ein wenig , um zwicken ein poliertes Aussehen zu erhalten)
Vor kurzem bin ich ein Fan von PRY geworden . Ich fand es unglaublich, Dinge wie das Überprüfen von Variablen, das Debuggen von laufendem Code und das Überprüfen von externem Code zu tun. Als Antwort auf diese spezielle Frage könnte es ein wenig übertrieben sein.
puts theobject.inspect.gsub(",", "\n")