ฉันกำลังมองหาวิธีถ่ายโอนโครงสร้างของวัตถุคล้ายกับฟังก์ชัน PHP print_r
และvar_dump
เพื่อเหตุผลในการดีบัก
ฉันกำลังมองหาวิธีถ่ายโอนโครงสร้างของวัตถุคล้ายกับฟังก์ชัน PHP print_r
และvar_dump
เพื่อเหตุผลในการดีบัก
คำตอบ:
.inspect
วิธีการของวัตถุใด ๆ ควรจัดรูปแบบถูกต้องสำหรับการแสดงผลเพียงแค่ทำ ..
<%= theobject.inspect %>
.methods
วิธีก็อาจจะเป็นการใช้งาน:
<%= theobject.methods.inspect %>
อาจช่วยได้ในการใส่<pre>
แท็กขึ้นอยู่กับข้อมูล
ในมุมมอง:
include DebugHelper
...your code...
debug(object)
ในตัวควบคุมรุ่นและรหัสอื่น ๆ :
puts YAML::dump(object)
ในมุมมองคุณสามารถใช้<%= debug(yourobject) %>
ซึ่งจะสร้างมุมมอง YAML ของข้อมูลของคุณ logger.debug yourobject.inspect
ถ้าคุณต้องการบางสิ่งบางอย่างในบันทึกของคุณคุณควรใช้
คุณยังสามารถใช้YAML :: dump shorthand ( 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
>>
หากคุณต้องการเพียงแค่ดูตัวอย่างเนื้อหาสตริงให้ลองใช้การเพิ่ม (เช่นในโมเดลคอนโทรลเลอร์หรือที่อื่น ๆ ที่ไม่สามารถเข้าถึงได้) คุณจะได้รับ backtrace ฟรี :)
>> raise Rails.root
RuntimeError: /home/marcin/work/github/project1
from (irb):17
>>
ฉันขอแนะนำให้คุณลองใช้Ruby-debug :
เป็นประโยชน์อย่างเหลือเชื่อ!
คุณสามารถใช้puts some_variable.inspect
. หรือรุ่นที่สั้นกว่า: p some_variable
. และสำหรับการส่งออกสวย, คุณสามารถใช้อัญมณี awesome_print
หากคุณต้องการให้ข้อมูลที่เกี่ยวข้องแสดงเป็น stdout (เอาต์พุตเทอร์มินัลหากคุณกำลังเรียกใช้จากบรรทัดคำสั่ง) คุณสามารถใช้p some_object
.
คำตอบก่อนหน้านี้ดีมาก แต่ถ้าคุณไม่ต้องการใช้คอนโซล (เทอร์มินัล) ใน Rails คุณสามารถพิมพ์ผลลัพธ์ใน View ได้โดยใช้ตัวช่วยActionView :: Helpers :: DebugHelper ของ debug
#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
ฉันใช้สิ่งนี้ :)
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
เมื่อเร็ว ๆ นี้ผมใช้awesome_print 's ap
วิธีการที่ทำงานบนคอนโซลเช่นเดียวกับในมุมมอง
เอาต์พุตสีเฉพาะประเภทสร้างความแตกต่างได้จริงๆหากคุณต้องการสแกนหาString
หรือ Numeric
วัตถุด้วยสายตา(แม้ว่าฉันจะต้องปรับแต่งสไตล์ชีตของฉันเล็กน้อยเพื่อให้ได้รูปลักษณ์ที่สวยงาม)
เมื่อเร็ว ๆ นี้ฉันได้เป็นแฟนของPRYฉันพบว่ามันเหลือเชื่อมากสำหรับการทำสิ่งต่างๆเช่นการตรวจสอบตัวแปรการดีบักโค้ดที่รันและการตรวจสอบโค้ดภายนอก คำตอบสำหรับคำถามเฉพาะนี้อาจเกินความจำเป็นเล็กน้อย
puts theobject.inspect.gsub(",", "\n")