ОБНОВЛЕНИЕ: я настоятельно рекомендую прочитать Как DHH организует свои контроллеры Rails , что в значительной степени объясняет это намного лучше, чем мой первоначальный ответ.
Я думаювопрос был бы более уместным, если бы вы сформулировали это по-другому:
Зачем нам нужна модель (в данном случае AR) для каждого контроллера?
ИОтвет, конечно, нет.Когда вы думаете о контроллерах, лучше не думать о данных, а сделать небольшой шаг назад и подумать о ресурсах .Если вы ищете REST в Интернете, вы найдете много статей, и большинство из них будет содержать различные объяснения терминов ресурс и представление .Чтобы сделать эту историю короткой, давайте просто упростим и скажем, что resource - это все, что стоит упомянуть.Статьи - это (коллекционный) ресурс.Магазин является (единственным) членом ресурса.
Взять, например, вход в систему пользователей.Возможно, у вас уже есть UsersController, который (по умолчанию) позволит вам добавлять новых пользователей (создавать ресурсы), удалять их (удалять ресурсы), отображать одного пользователя, а также всех пользователей.Если вы просто думаете с точки зрения данных и контроллеров, вы, вероятно, начнете создавать дополнительные действия, такие как login_user
в UserController, что является неприятным запахом.Если вы думаете о ресурсах, а это «все, о чем стоит упомянуть или о создании URI для него», вы можете подумать, что вам нужен другой ресурс, а именно: сеансов .Подумайте об этом: когда пользователь входит в систему, он на самом деле создает ресурс сеанса.И с выходом вы удаляете, удаляете ресурс.Это гораздо лучше объяснено в учебнике Rails , который я рекомендую: http://ruby.railstutorial.org/chapters/sign-in-sign-out#sec:sessions
Напомним, это может помочь вам выяснить, когда вам нужен новый контроллер:
- Когда вы думаете о том, чтобы поместить в контроллер действия, не относящиеся к RESTful, такие как
log_in
, calculate_date
и т. Д. - Когда есть что-то, что вы можете назвать, и это достаточно "интересно", чтобыбыть отдельным ресурсом.
- Кроме того, когда вы разрабатываете в стиле "снаружи", такие ответы приходят более естественно: http://rubylearning.com/blog/2010/10/05/outside-in-development/
В целом, изучение REST и его философииочень поможет.