That is about as MVC as it gets.
The role of the controller in this simple case is to make the correct model available to the correct view (mediation). Thanks to Rails, you did not have to actually write any controller code for that to happen. That is kind of the point of the Rails MVC framework - eliminate the mundane, boilerplate pattern implementation from your application.
Semantically, using Products.find(:all) in the view and assigning @products = Products.find(:all) in the controller and then referencing @products in the view are the same thing, but why would you deliberately choose the technique that requires more code? (If you need to refactor later, easy enough, but don't refactor prematurely or you end up with cruft).
And, Rails will cache the query (for the life of the request), so it does nothing for performance, even if you use Products.find(:all) many times in the same view.
If you are going to scope your query, you would do that in the model, and again, you should not need any controller code.
When do you need controller code? Perhaps to perform authorization or some domain specific logic, or you need to respond with an alternate (not HTML) format, such as JSON.