Не извлекайте данные БД в представлениях - это работа контроллера. По вашему мнению, вы должны ссылаться только на данные, загруженные вашим методом контроллера.
В вашем случае это означает создание списка исполнителей с использованием :include
, чтобы песни были предварительно загружены.
# In your controller
@artists = Artist.find(:all, :include => :songs)
РЕДАКТИРОВАТЬ В ответ на комментарий метода есть две проблемы с извлечением данных из представлений:
- Разделение интересов. Это то, о чем я говорил, когда говорил, что вы «должны» извлекать данные только из контроллера - в MVC контроллер обрабатывает доступ к данным, и, теоретически, представления не содержат логики. Конечно, иногда проще получать данные из ваших представлений, но это выглядит довольно быстро.
- Эффективность, как по количеству запросов, так и по размеру результата запроса, о чем, я думаю, и говорил метод. Если вы загружаете достаточно данных на одной странице, чтобы это стало проблемой, мне интересно, не предполагает ли это какой-либо рефакторинг (или хотя бы разбиение на страницы).