Когда создавать новый контроллер в рельсах
Мне интересно, когда вы знаете, что вам нужно создать контроллер в приложении rails.
Например, я просматриваю учебное пособие в Agile Web Development с Rails, и приложение создает несколько моделей, все с отдельными видами и контультерами. Однако мы также создаем контроллер Store, но не связан с ним. Зачем нам нужен контроллер без модели? Не могли ли контроллеры для моделей обрабатывать все необходимые операции?
Это распространено? Если да, то как вы определяете, когда что-то гарантирует контроллер?
Спасибо!
Эти ответы помогают, спасибо.
Меня беспокоит то, что когда я что-то самостоятельно разрабатываю, я начну создавать бесполезные контроллеры, или с другой стороны, не создавать необходимые контроллеры. Но, я полагаю, мне нужно перестать думать о контроллерах и моделях как о соотношении 1-1, правильно? Если я правильно понимаю, может быть много контроллеров, обращающихся к модели, и многие модели используются в одном контроллере?
Ответы
Ответ 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
, но это не является наиболее частым сочетанием.