Rails:如何在路由间传递随机生成的实例变量
嘿,这个问题我之前帮朋友处理过类似的,其实核心就是要在用户提交答案的时候把当前展示的闪卡唯一标识一起传过去,这样后端就能精准关联到对应的闪卡啦!我给你梳理几个关键步骤:
核心解决方案:绑定闪卡ID到提交流程
1. 前端展示闪卡时携带唯一标识
当你从Flashcards表随机取出一张闪卡展示给用户时,别只展示内容,要把这张闪卡的id(或者你表中用的唯一主键)悄悄存起来——可以存在隐藏的HTML输入框里,或者用JavaScript变量保存。举个例子:
<!-- 隐藏字段存储当前闪卡ID --> <input type="hidden" id="currentFlashcardId" value="123"> <!-- 展示闪卡内容 --> <div class="flashcard-content">Bonjour</div> <input type="text" id="userAnswer" placeholder="输入翻译..."> <button onclick="submitAnswer()">提交答案</button>
对应的JS提交函数:
function submitAnswer() { const flashcardId = document.getElementById('currentFlashcardId').value; const userAnswer = document.getElementById('userAnswer').value; // 把闪卡ID和用户答案一起发给后端 fetch('/submit-answer', { method: 'POST', body: JSON.stringify({ flashcardId, userAnswer }), headers: { 'Content-Type': 'application/json' } }); }
2. 后端接收并关联到Practices表
后端收到请求后,要把flashcardId和用户答案、练习会话ID(如果你的应用有会话追踪的话)一起存入Practices表。假设用SQL的话,插入语句大概是这样:
INSERT INTO Practices (session_id, flashcard_id, user_answer, submitted_at) VALUES ('用户当前的练习会话ID', '前端传过来的flashcardId', '用户输入的答案', NOW());
这样后续不管是统计正确率还是回顾练习记录,都能通过flashcard_id关联到Flashcards表里的正确翻译了。
3. 验证答案的逻辑(可选但重要)
如果要实时判断用户答案是否正确,后端可以先根据flashcardId从Flashcards表取出正确翻译,再和用户提交的答案对比:
SELECT correct_translation FROM Flashcards WHERE id = '前端传过来的flashcardId';
对比后可以把结果(正确/错误)也存入Practices表,方便后续分析用户的薄弱点。
额外小提醒
- 切换闪卡时一定要更新隐藏字段里的ID,别一直沿用旧的;
- 如果是对安全性有要求的场景,可以对闪卡ID做会话级的加密,防止用户手动篡改ID作弊。
内容的提问来源于stack exchange,提问作者Jules Nuggy
相关产品推荐
相关产品推荐

