Posting homework / exercise questions verbatim is generally frowned upon on most mailing lists. A better start might be “here’s what I’ve tried, and here’s what’s going wrong”, or “here’s what I’ve found in research but it doesn’t make sense”.
In this specific case, you may want to consider other ways that Car could get an Engine object besides constructing it explicitly in Car#engine. Maybe pass it in as an argument, or change the attr_reader to an attr_accessor and directly write it? Also consider splitting the “how” (the class to be constructed) from the “what” (the parameters passed to the constructor).
Remove Car's explicit reference to Engine by using dependency injection.
The first question to ask yourself is, "Why is it important to use
dependency injection in this specific scenario?"
After all this is Ruby, not some lame statically typed language like
Java or something. In Java Dependency Injection (DI) is uses to solve a
lots of issues that are mostly due to limitations of the language
itself. In fact it requires looking outside of the language itself to
even support DI (i.e. XML configuration files or Java annotations).
There's a tendency to make DI sound like something magical or
complicated in the Java world, but in Ruby (and other dynamically typed
languages) you won't here much about it. Mostly because it's a really
simple concept with a really simple implementation.