Когда создать новый контроллер в rails

Мне интересно, когда вы знаете, что вам нужно создать контроллер в Rails-приложение.

например, я прохожу учебник по гибкой веб-разработке с Rails, и приложение создает несколько моделей, все с отдельными представлениями и contollers. Однако мы также создаем контроллер магазина, но не связанную с ним модель. Зачем нам контроллер без модели? Не могли бы контроллеры для моделей обрабатывать все необходимые операции?

Это общее? Если да, то как вы определяете, когда что-то требует контроллер?

спасибо!


эти ответы помогли, спасибо.

меня беспокоит то, что когда я разрабатываю что-то самостоятельно, я начну создавать бесполезные контроллеры или, с другой стороны, не создавать необходимые контроллеры. Но, я полагаю, мне нужно перестать думать о контроллерах и моделях как об отношениях 1-1, правильно? Если я правильно понимаю, может быть многие контроллеры обращаются к модели и многие модели используются в одном контроллере?

4 ответов


UPDATE: я настоятельно рекомендую читать как DHH организует свои контроллеры Rails что в значительной степени объясняет это намного лучше, чем мой первоначальный ответ.


Я думаю, что вопрос был бы более подходящим, если бы вы поставили его по-другому:

зачем нам нужна модель (AR в этом случае) для каждого контроллера?

и ответ, Конечно, вы не. Когда вы думаете о контроллерах лучше не подумайте о данных, но сделайте небольшой шаг назад и подумайте о ресурсы. Если вы ищете отдых в интернете, вы найдете много статей, и большинство из них будут включать в себя различные объяснения терминов ресурс и представление. Чтобы сделать эту историю короткой, давайте просто упростим и скажем, что ресурс - это все, что стоит упомянуть. Статьи-это ресурс (коллекция). Store-это (единственный, член) ресурс.

возьмите вход в пользователей, например. Вероятно, у вас уже есть UsersController, который (по умолчанию) позволит вам добавлять новых пользователей (создавать ресурс), удалять их (удалять ресурс), отображать одного пользователя, а также всех пользователей. Если вы просто думаете с точки зрения данных и контроллеров, вы, вероятно, начнете создавать дополнительные действия, такие как login_user в UserController, который является запахом. Если вы думаете о ресурсах, и это "все, что стоит упомянуть или создать URI для этого", вы можете подумать, что вам нужен другой ресурс, и это: сеансы. Подумайте об этом: когда пользователь входит в систему, он на самом деле создает сеанс ресурса. И с выходом, вы удаляете,удалить ресурсе. Это гораздо лучше объясняется в Rails учебник книга, которую я рекомендую:http://ruby.railstutorial.org/chapters/sign-in-sign-out#sec:sessions

напомним, что это может помочь вам в выяснить, когда вам нужен новый контроллер:

  • когда вы думаете о том, чтобы положить не RESTful действия в контроллер, как log_in, calculate_date, ect.
  • когда есть что-то, что вы можете назвать, и это "интересно" достаточно, чтобы быть отдельным ресурсом.
  • кроме того, когда вы развиваетесь в стиле" снаружи", такие ответы приходят более естественно: http://rubylearning.com/blog/2010/10/05/outside-in-development/

В целом, изучение отдыха и его философии очень поможет.


очевидно, что нет жесткого и быстрого правила; но я думаю, что полезно подумать о том, что представляют собой три разные части MVC (или "делают"):

  • модели представляют данные и бэкэнд data-logic
  • контроллеры пусть пользователь взаимодействует с моделями
  • вид то, что пользователь видит, когда пользователь взаимодействует через контроллер

поэтому разные контроллеры будут используется, когда вы хотите делать разные (категории) вещей.

например, в книге AWD приложение Depot работает (в широком смысле) путем манипулирования и хранения продуктов - поэтому у него есть модель продукта.

существует два разных способа взаимодействия; как владелец депо (добавление продуктов, корректировка цен и запасов...) или как клиент(добавление продуктов в корзину, проверка...). Таким образом, он имеет контроллер администратора для первого и магазин контроллер для последнего.

другая причина, и та, которая часто будет связываться с первой, заключается в том, что вашим контроллерам нужна другая упаковка. Например, вам нужно аутентифицировать пользователя, прежде чем делать какие-либо административные вещи, но вы не делаете для клиентских вещей. Таким образом, вы можете разделить действия на два контроллера и поставить before_filter на Admin one для обработки аутентификации.


Я тоже новичок в RoR и я делаю учебник Майкла Хартла. Я обнаружил в своих исследованиях и в разговоре с более опытным Rubyist, что когда вам нужна помощь вашей модели (базы данных), вы должны создать контроллер. Например, если вы создаете сеанс и метод, который вы создаете, будет нуждаться во взаимодействии с моделью (базой данных) с помощью, хранения, обновления, добавления (a.к. a. RESTful behavior), тогда вам понадобится контроллер.

Почему? Как указывалось ранее: работа фрейма MVC требует, чтобы контроллеры были единственным элементом, который может взаимодействовать с моделями (вроде вышибалы в секции V. I. P. ночного клуба, заполненного горячими женщинами! Вундеркинды представлены "The view" LOL!!)!!


контроллер может использоваться для создания страниц без границ модели. Примером этого может быть юридическое уведомление или sth. как это. Статические вещи...

A Controller данные controlls. В большинстве случаев эти данные поступают из Model но это не обязательно wheater его наиболее распространенная комбинация.