Тьфу - не уверен, почему у меня так много проблем с этим.
Написание простого приложения для вопросов и ответов (см. Rails - Куда должен идти этот код, чтобы оставаться верным дизайну MVC? для некоторых деталей)
Попытка придерживаться принципов MVC и правильного дизайна - это приложение просто опыт обучения, поэтому я хочу убедиться, что я делаю вещи общепринятым способом
Упомянутый вопрос дал мне совет разделить мою функциональность на разные модели.Однако, пытаясь реализовать это, я обнаруживаю, что передаю параметры повсюду, и у меня просто возникает ощущение, что я что-то не так делаю правильно.Итак, вот основной макет приложения и задачи, которые я пытаюсь выполнить - если кто-то может сообщить мне, если я на правильном пути ...
Модель вопроса: содержит идентификатор (pkey),question_number (int), question_text (строка), answer_text (строка)
Модель пользователя: содержит: id (pkey), uid (строка), current_question (int), имя (строка)
Я создал оба вышеперечисленных с помощью scaffold, чтобы у них были все маршруты по умолчанию, действия контроллера и т. Д. *
Я создал контроллер шлюза и установил его в качестве моей страницы по умолчанию с помощью route.rb
Идея состоит в том, что пользователь просматривает localhost: 3000 /? Uid = "что угодно", и на странице указателя отображается текущий вопрос (Question.find_by_question_number (@ user.current_question))
Пользователь вводит ответ в форме, который помещает его в действие.В моем первом наброске это называлось действие в контроллере шлюза, которое проверяло, был ли ответ правильным.
Теперь я пытаюсь воспользоваться советом Вадима в моем последнем вопросе и сохранить логин пользователя в пользовательском и вопросе.логика под вопросом.Так что теперь моя форма отправляет сообщения в контроллер пользователей.
Вот где я запутался.Логический код не должен быть в контроллере, верно?Поэтому я вызываю метод в модели, передавая ему такие вещи, как ответ пользователя и идентификатор вопроса, поскольку я не могу прочитать сеанс в модели.Это работает нормально, теперь я могу позаботиться о логике в пользовательской модели - так что теперь пользовательская модель вызывает метод в модели вопроса, чтобы фактически проверить ответ.Это означает, что мне нужно создать экземпляр объекта моего вопроса, используя переданный мной идентификатор, а затем вызвать другой метод, передав (снова!) Ответ.И т.д ... и т.д ...
Видишь, о чем я?Я определенно понимаю ценность MVC в теории, но всякий раз, когда я пытаюсь его реализовать, я сталкиваюсь с таким беспорядком, как этот.Это правильно, и кажется, что все усложняется, потому что моя программа настолько проста?
Может кто-нибудь рассказать мне, как бы вы разбили логику?Вам не нужно публиковать реальный код, просто то, что вы бы поместили куда, например:
Контроллер шлюза: -дисплей-вопрос для пользователя -примите ответ и передайте в XXX контроллер
XXX контроллер:-call метод Foo в модели XXX, передавая X и Y
Основной поток должен быть таким: пользователь показывает вопрос, пользователь отвечает на вопрос, ответ сравнивается с правильным ответом в модели вопроса, сообщение возвращается на основеВ результате, и ответ был правильным, значение current_question пользователя увеличивается.
Большое спасибо за помощь, у меня есть книги и Google, и я прочел свои $$ off, только что потерянные в соусе.Это моя первая попытка выйти за рамки заранее написанного примера кода, поэтому будьте осторожны !!
Спасибо !!