Подтвердить что ты не робот

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

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

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

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

Спасибо!


Эти ответы помогают, спасибо.

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

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ: Я настоятельно рекомендую читать Как DHH организует свои контроллеры Rails, который в значительной степени объясняет это намного лучше, чем мой первоначальный ответ.


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

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

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

Возьмите подписку на пользователей, например. Вероятно, у вас уже есть UserController, который (по умолчанию) позволит вам добавлять новых пользователей (создавать ресурс), удалять их (удалять ресурсы), отображать одного пользователя, а также всех пользователей. Если вы просто думаете с точки зрения данных и контроллеров, вы, вероятно, начнете создавать дополнительные действия, такие как login_user в UserController, что является запахом. Если вы думаете о ресурсах, и это "все, что стоит упомянуть или создать URI для него", вы можете подумать, что вам нужен другой ресурс, а именно: сеансы. Подумайте об этом: когда пользователь заходит, он фактически создает ресурс сеанса. И с выводом, вы удаляете, удаляете ресурс. Это гораздо лучше объясняется в книге Rails tutorial, которую я рекомендую: 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/

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

Почему? Как указано выше: для работы с кадрами MVC требуется, чтобы контроллеры были единственным элементом, который может взаимодействовать с Моделями (вроде как вышибала при VIP-отделении ночного клуба, наполненного горячими женщинами! Вексы представлены "взглядом" LOL!!)!!

Ответ 4

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

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