The MVC paradigm doesn't restrict views from accessing models directly. Views have as much access to models as controllers do. In fact, the logic of that find should go in the model behind a "find_alphabetical" method or something. It doesn't belong in the controller just as much as the view.
But anyway, back on topic. The role of the controller is to handle the user input (request) and spit out a response. The controller should take the request and turn it into variables for the view to use. For example, if the user is performing a keyword search on products, it is the controllers job to take the search parameters and put the list of products in a variable for the view to display.
In this case, however, the request has nothing to do with products. It is not dependent on user input and is not the primary focus of the page, it is just a little extra thing on the side.
The problem with putting it in the controller is separation of concern. If you want to add the list of products to another page, or take it away from a page, you need to remember to go back into the controller and adjust the before filter. This feels wrong. Placing it in a helper which calls a partial solves this issue and makes it self contained.
- Free Ruby on Rails Screencasts