新手问题 [求助] 怎么用 Rails 写出选择题的试卷,Multiple choice quiz

Vdan · 发布于 2017年05月27日 · 最后由 akayuki 回复于 2017年06月04日 · 697 次阅读
A6ae59

技术大咖,老鸟们,前辈们,我又来请教问题了。

如上图,我想用rails写出这种功效的网站。但是一上午查到的资源只有 surveyor 的gem,然后我还拆的不太懂。 很惊喜的翻到了这个网站,https://css-tricks.com/examples/Quiz/
但是不爽的是这个是用PHP写的。。。

大神们,你们见过的市面多,吃过的大米饭多。我想请问,有没有相关的gem包可以解决的,或者是 一些核心的算法,怎么实现选择功能的?求点拨,求开导。

小的在此言谢。

我知道我问的这个问题很大。那我说说我现在的想法:建立了三个model , question, answer 和 user answer。 question 和 answer的 关系我知道怎么处理,但是不知道怎么将 考生填写的 user answer这个表单, 和answer 这个表单相匹配,然后得出结果。

我还搜到了关键字, select_tag , check_box, 多态

我还能想到是不是可以 用 case when 的方式转换这几种条件。

但是不知道怎么把这些零件,组装成个我想用的轮子。

上述都是我的想法,初级小白的想法。坐标:北京,求大神约茶。

共收到 8 条回复
A6ae59

我能实现的是,一道题,submit 一下,这样很low逼。 我还能实现的是,一道答案,定义了是或否,但是4个答案,需要写8次。很low,我冥冥之中能感觉到,这个轮子已经被人造出来了,我就是不知道在哪能找到。😅 😅 😅 😅 😅 😅 😅 我还找到了别人用 HTML和CSS实现的选择题的样板。

96

一个试题model 一个试卷的model 一个回答结果的 , 估计 没有现成的东西 ,试题组成试卷,考生选择试卷进行作答

3楼 已删除
96

Question(id, content)
Option(id, question_id, content, isCorrect)
UserAnswer(id, user_id, question_id, option_id)

17727

四个表

Question.has_many :options
Option.belongs_to :question
Option.has_many :users, through :answers
User.has_many :options, througn :answers
96

这个很简单啊,表分question表,answer表, question.rb

has_many: answers

answer.rb

belongs_to: question
question: id, title, correct
answer: name, content, question_id

如:

question: id: 1, title: 张三为什么叫张三?, correct: A

answer: id:1, name: A, content: 因为他姓张, question_id: 1

answer: id: 2, name: B, content: 因为他爸姓张, question_id: 1

然后在controller中直接查就行了,比如

@questions = Question.order(id: :desc).includes(:answers).limit(10)

然后就是view中显示了,最后提交时,获取question的id和用户选择的答案,和正确的对比就行了

12834

首先,我们来选个切入方向, 这里我就从用户的角度入手。
step by step:

  1. 用户最能直观感感受到的其实就一部分,试卷TestPaper
    这里就要分我们要不要对用户的答卷做记录,如果要记录的话就需要用户答卷记录表AnswerPaper; 这里我假定需要记录,所以目前就有2个主要modelTestPaper。

  2. TestPaper 部分
    试卷无非就是问题Question和答案Answer组成的,这里面会有很多跟具体场景关联的细节的问题,编码的时候根据需求再扯。

  3. AnswerPaper
    我们很容易从试卷的结构分析出答卷的详情的AnswerPaperDetail内容。

  4. 下面进入拟表环节
    我这里按我的理解简单罗列一下就行了,具体看你自己根据实际需求:

    # 这里看你需不需要用相同试题记录生成不同的试卷,如果不需要的话,直接把`test_paper_id`加到`Question`.这里就不需要question_ids数组了
    TestPaper(id: uuid, name: string, code: string, question_ids: text);
    AnswerPaper(id: uuid, test_paper_id: uuid, user_id: uuid);
    # type主要用于判断问题类型(单选题、多选题、填空题),category_id判断问题所属的行业或者年级,算了越拓展这表越大,自己看着办。
    Question(id: uuid, content: string, type: string, order_num: integer, category_id: uuid)
    Answer(id: uuid, content: string, order_num: integer, is_right: boolean)
    # answer可以存放不同类型问题的答案,如果你只有选择题可以存放answer_ids
    AnswerPaperDetail(id: uuid, answer_paper_id: uuid, question_id: uuid, answer: text)
    
  5. 表之间的关联应该很清楚了吧,我还有事就不写了(表之间关联的分析应该在拟表之前)

以上就是我的分析过程。

28931

有一个哥们写的答题网站,我觉得非常符合你的需求,推荐一下。 https://github.com/BranLiang/project_surveyor

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册