#haskell #ihp
Вопрос:
Контекст
У меня есть 2 контроллера:
- LessonsController (с индексом представлений и отображением)
- QuizAnswersController (без просмотров)
В соответствии с сгенерированным кодом контроллера, в LessonsController
ShowLessonAction
рендерах ShowView
.
В ShowView
, у меня есть ссылка на действие в QuizAnswersController
:
<a href={CheckQuizAnswerAction (get #id answer)}>Check Answer</a>
CheckQuizAnswerAction
проверяет, правильный ли ответ, а затем перенаправляет на ShowLessonAction
сообщение с сообщением об успешном выполнении:
action CheckQuizAnswerAction { quizAnswerId } = do
quizAnswer <- fetch quizAnswerId
quiz <- fetch (get #quizId quizAnswer)
let lessonId = get #lessonId quiz
case (get #correct quizAnswer) of
True -> setSuccessMessage "Correct!" >> redirectTo ShowLessonAction { lessonId }
False -> setSuccessMessage "Try again" >> redirectTo ShowLessonAction { lessonId }
Вопрос
Все работает, но я заметил, что после CheckQuizAnswerAction
вызова URL-адрес:
/CheckQuizAnswer?quizAnswerId=123…
вместо:
/Без шоу?LessonID=123…
Что происходит, чтобы заставить это работать с другим URL-адресом?
Ответ №1:
Поскольку ваше действие вызывает побочный эффект, лучше всего использовать форму здесь:
<form method="POST" action={CheckQuizAnswerAction (get #id answer)}>
<button type="submit" class="btn btn-link">Check Answer</button>
</form>
Использование этого вместо <a href={CheckQuizAnswerAction (get #id answer)}>Check Answer</a>
того, чтобы уже могло решить проблему 🙂