Я изучаю рельсы и создаю простое приложение для вопросов / ответов, чтобы проверить некоторые из представленных мне концепций. Я использовал Generate Scaffold для создания двух классов моделей - Question и User.
Таблица вопросов состоит из question_number (int), question_text (строка) и answer_text (строка).
В таблице пользователей есть uid (строка), name (строка) и current_question (int)
Затем я создал контроллер с именем gateway. У меня есть приложение, работающее сейчас, где пользователь может перейти на главную страницу, передавая свой UID в качестве параметра (в конечном счете, будет передан функцией входа в систему), и приложение отобразит вопрос, над которым он в настоящее время работает, захватывая номер вопроса, который совпадает с текущий_пользователь Отлично.
Затем я создал метод ответа в контроллере шлюза. Этот метод берет ответ, который пользователь вводит в форму, и сравнивает его с ответом в базе данных, перенаправляя пользователя на разные страницы в зависимости от того, был ли ответ правильным или неправильным.
Моя проблема - я установил переменные экземпляра в методе index для установки текущего пользователя и текущего вопроса - но они не сохраняются в моем методе ответа. Какова лучшая практика Rails здесь? Должен ли я:
1) Передайте их как параметры методу ответа через форму, точно так же, как я передаю ответ (кажется неэффективным, когда я уже создал экземпляры vars в контроллере, а теперь передаю их обратно ...)
2) Хранить это как переменные в сеансе?
3) Хранить их во Flash?
4) Просто найдите их снова в методе ответа (не нравится повторять код, и 2 вызова для одной и той же информации кажутся бесполезными)
Я даже использую правильную структуру для этого приложения? Что бы вы сделали в этом случае, когда вы хотите получить атрибут пользователя (его текущий авторизованный вопрос) и использовать его несколько раз для запроса другой части базы данных (шаг 1 - получить вопрос, соответствующий авторизованному вопросу пользователя, шаг 2 - проверьте правильность введенных пользователем ответов, шаг 3 - увеличьте счетчик пользовательских вопросов)
больше информации, @ wukerplank
Нет плагинов для обработки сеансов. По сути, мой поток выглядит так:
- пользователь "login" (в этом небольшом тестовом приложении логика входа отсутствует, поэтому я просто передаю uid в качестве параметра в URL)
- Контроллер шлюза получает текущий вопрос пользователя с помощью @question = Question.where (:: question_number => @ user.current_question) .first
- Пользователь отображает текст вопроса и форму для ввода ответа
- Кнопка отправки вызывает my: answer action и передает строку ответа
- Здесь я бы хотел просто снова позвонить @question, но не могу, потому что это не сохраняется. Поэтому я должен либо повторить шаг 2, либо найти место для хранения данных, на которые мне нужно сослаться снова. Я предполагаю, что принципы DRY в Rails не рекомендуют повторять шаг 2, поэтому мне интересно, где и как лучше всего хранить их (и другие переменные, которые могут мне понадобиться)
Спасибо!