Назначение контроллера - координировать соответствующий ответ на запрос или действие. В идеале просмотры не содержат значимых бизнес-логов c. Контроллер координирует эту деятельность - такие вещи, как выполнение запросов, загрузка объектов, запуск фоновых заданий и т. Д. c. - а затем организует результат в данные, которые представление может легко использовать для рендеринга.
Однако это не означает, что они не могут (или не должны) получать объекты модели или вызывать для них методы. Модели также связаны с представлениями. Сами модели обычно не должны касаться самих бизнес-логик c, при этом большинство методов publi c являются простыми получателями атрибутов. Во многих случаях проще и понятнее для контроллера просто передать экземпляр модели в представление и позволить представлению извлекать атрибуты, необходимые для отображения. Роль контроллера в этом случае - загрузка правильной модели, рендеринг правильного представления и соединение этих двух.
Например, предположим, что у вас есть модель User
, в которой стандартный вид имени, даты рождения и любых атрибутов данных. В этом случае контроллер обычно просто загружает правильный объект User
, и фактически Rails ориентирует многие из своих помощников представления для быстрого создания представлений вокруг данной модели:
<%= form_for @person do |f| %>
<%= f.label :first_name %>:
<%= f.text_field :first_name %><br />
<%= f.label :last_name %>:
<%= f.text_field :last_name %><br />
<%= f.submit %>
<% end %>
Контроллер является абсолютно подходящее место для (или, по крайней мере, место для инициирования) более сложной обработки, когда вам нужно обрабатывать данные для отображения. Простым примером этого может быть сортировка массива Users
перед рендерингом представления.