Я не думаю, что в том, что вы делаете, есть что-то радикально неправильное.Цикл по клиентам и вывод их некоторых атрибутов и для каждого клиента, цикл по их заказам и вывод некоторых атрибутов - это очень ориентированная на представление операция.
В архитектуре MVC контроллер отвечает за взаимодействие смодель, выбирая представление и (конечно, в случае с Rails) предоставляя в представление информацию, необходимую для визуализации модели.
Вы можете рассмотреть возможность извлечения кода в помощник вида, если у вас есть такойТочный код повторяется более одного раза.Вы могли бы даже обобщить это, передавая название модели и ассоциации.Я не проверял это, но вы должны быть в состоянии сделать что-то вроде этого:
def display_attributes(models, association, attribute, association_attribute)
content = ''
models.each do |m|
content << "<p>#{m.attribute}</p>"
associated_models = m.association
associated_models.each do |am|
content << "<p>#{am.association_attribute}</p>"
end
end
content
end
Тогда в представлении вы можете использовать помощника следующим образом:
<%= display_attributes(@customers, orders, name, name) %>
Очевидно,вы бы изменили разметку HTML внутри вспомогательного метода в соответствии с вашими требованиями.Обратите внимание, что если вы не используете Rails 3, вам может понадобиться экранировать вывод имен атрибутов в вспомогательном методе.