📖 Scenario: You are creating a simple Ruby program to represent a book with its title and author. You want to make it easy to see the book's details as a string.
🎯 Goal: Build a Ruby class Book that stores a title and author, and customize its string representation using the to_s method.
📋 What You'll Learn
Create a class called Book with title and author attributes
Add an initializer method to set title and author
Define a to_s method that returns a string like "Title: The Hobbit, Author: J.R.R. Tolkien"
Create an instance of Book with specific title and author
Print the instance to show the custom string representation
💡 Why This Matters
🌍 Real World
Customizing the string representation of objects helps make debugging and displaying information clearer and more user-friendly.
💼 Career
Understanding how to override <code>to_s</code> is useful for Ruby developers to create readable outputs for objects in logs, user interfaces, and reports.
Progress0 / 4 steps
1
Create the Book class with attributes
Create a class called Book with an initialize method that takes title and author as parameters and sets them as instance variables.
Ruby
Hint
Use def initialize(title, author) and set @title = title and @author = author.
2
Add the to_s method for string representation
Inside the Book class, define a to_s method that returns a string in the format: "Title: #{@title}, Author: #{@author}".
Ruby
Hint
Define def to_s and return the formatted string using "Title: #{@title}, Author: #{@author}".
3
Create a Book instance
Create a variable called my_book and assign it a new Book object with the title "The Hobbit" and author "J.R.R. Tolkien".
Ruby
Hint
Use my_book = Book.new("The Hobbit", "J.R.R. Tolkien") to create the instance.
4
Print the Book instance
Use puts my_book to print the string representation of the my_book object.
Ruby
Hint
Use puts my_book to display the book details.
Practice
(1/5)
1. What does the to_s method do in Ruby?
easy
A. Converts an object to its string representation
B. Converts a string to a number
C. Deletes an object from memory
D. Creates a new object
Solution
Step 1: Understand the purpose of to_s
The to_s method is used to convert any Ruby object into a string format.
Step 2: Compare options with the definition
Only Converts an object to its string representation correctly describes this conversion to string. Other options describe unrelated actions.
Final Answer:
Converts an object to its string representation -> Option A
Quick Check:
to_s means convert to string [OK]
Hint: Remember: to_s means 'to string' conversion [OK]
Common Mistakes:
Confusing to_s with to_i (integer conversion)
Thinking to_s deletes objects
Assuming to_s creates new objects
2. Which of the following is the correct way to define a custom to_s method in a Ruby class?
easy
A. def to_s; "My object"; end
B. def toString; "My object"; end
C. def tostring; "My object"; end
D. def to_s() "My object" end
Solution
Step 1: Recall Ruby method naming conventions
Ruby method names are case-sensitive and to_s must be exactly that, with underscore and lowercase.
Step 2: Check syntax correctness
def to_s; "My object"; end uses correct method name and syntax. def to_s() "My object" end misses semicolon or newline before string, causing syntax error. Options B and C use wrong method names.
Final Answer:
def to_s; "My object"; end -> Option A
Quick Check:
Method name must be exactly to_s [OK]
Hint: Use exact method name to_s with underscore [OK]
Common Mistakes:
Using wrong method names like toString or tostring
Omitting semicolons or line breaks causing syntax errors
Using parentheses incorrectly in method definition
3. What will be the output of this Ruby code?
class Person
def initialize(name)
@name = name
end
def to_s
"Person named #{@name}"
end
end
p = Person.new("Alice")
puts p.to_s
medium
A. #
B. Error: undefined method to_s
C. Alice
D. Person named Alice
Solution
Step 1: Understand the custom to_s method
The class Person defines to_s to return "Person named #{@name}", where @name is set to "Alice".
Step 2: Check what puts p.to_s prints
Calling p.to_s returns "Person named Alice", which is printed by puts.
Final Answer:
Person named Alice -> Option D
Quick Check:
Custom to_s returns formatted string [OK]
Hint: Custom to_s returns your string, not default object info [OK]
Common Mistakes:
Expecting default object id string instead of custom string
Confusing instance variable with method name
Thinking to_s is undefined
4. Identify the error in this Ruby class that tries to customize to_s:
class Car
def initialize(model)
@model = model
end
def to_s
"Car model: " + model
end
end
c = Car.new("Tesla")
puts c.to_s
medium
A. Missing return statement in to_s
B. Syntax error in method definition
C. Undefined local variable or method 'model'
D. No error, prints 'Car model: Tesla'
Solution
Step 1: Check variable usage inside to_s
The method uses model without @, but the instance variable is @model.
Step 2: Understand Ruby variable scope
Without @, Ruby looks for a local variable or method named model, which does not exist, causing an error.
Final Answer:
Undefined local variable or method 'model' -> Option C
Quick Check:
Instance variables need @ prefix inside methods [OK]
Hint: Use @ before instance variables inside methods [OK]
Common Mistakes:
Forgetting @ before instance variables
Assuming local variables exist without definition
Thinking return statement is mandatory
5. You want to create a Ruby class Book that stores a title and author, and when printed, shows "Title: [title], Author: [author]". Which to_s method correctly achieves this?
hard
A. def to_s
"#{title}, #{author}"
end
B. def to_s
"Title: #{@title}, Author: #{@author}"
end
C. def to_s
"Title: title, Author: author"
end
D. def to_s
puts "Title: #{@title}, Author: #{@author}"
end
Solution
Step 1: Use instance variables with interpolation
To show the actual title and author values, use #{@title} and #{@author} inside the string.
Step 2: Avoid printing inside to_s
to_s should return a string, not print it. def to_s
puts "Title: #{@title}, Author: #{@author}"
end uses puts, which returns nil.
Final Answer:
def to_s
"Title: #{@title}, Author: #{@author}"
end -> Option B
Quick Check:
Return string with instance variables interpolated [OK]
Hint: Return string with #{@var}, don't print inside to_s [OK]
Common Mistakes:
Using variable names without @ inside strings
Printing inside to_s instead of returning string
Not interpolating variables, printing literal text
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.