如何建模和集成rails mutliple选择测验?

时间:2017-09-24 16:06:10

标签: ruby-on-rails forms model-view-controller database-design

我正在尝试创建一个小应用程序,用户可以在其中注册,登录,并能够查看和交互问题以用于教育目的。

我可以想象所有内容,但我无法将其转换为实际代码。

我知道问题模型会有

Question Title - as a string or text

Question Answer 1 - as a string or text

Question Answer 2 - as a string or text

Question Answer 3 - as a string or text

Question Answer 4 - as a string or text

Question CORRECT ANSWER 5 - as a string or text

当然,我知道strong_params也必须接受这些属性(参数?)。

如何创建一个模型,其中new-question.html.erb表单将传递5个选项的数组,并能够将其标记为正确?除此之外,我想在每次加载页面时随机播放或随机化答案选项。

任何帮助或指导都会有所帮助。迈克尔哈特尔的教程很棒,但我不确定我是否遗漏了它的东西或者没有点击的东西。

2 个答案:

答案 0 :(得分:1)

如果答案的数量始终为5或更少,那么使用带有5个文本字段的问题模型的答案并没有错。您也可以默认第一个答案是正确的答案,并在视图中显示问题和答案随机播放答案。

rails g model Question title:text correct_answer:text answer_1:text answer_2:text ...

您刚刚开始使用问题,答案和嵌套表单的单独模型,不要太烦心。保持简单。

答案 1 :(得分:1)

数据库架构示例

  create_table "questions", force: :cascade do |t|
    t.references "quiz_id"
    t.string   "question_word"
    t.string   "option1"
    t.string   "option2"
    t.string   "option3"
    t.string   "option4"
    t.integer  "answer",            default: 0
    t.integer  "score",             default: 2
    t.datetime "created_at",                    null: false
    t.datetime "updated_at",                    null: false
  end

  create_table "quizs", force: :cascade do |t|
    t.string   "quiz_name"
    t.string   "notes"
    t.datetime "created_at",                    null: false
    t.datetime "updated_at",                    null: false
  end

  create_table "user_quiz", force: :cascade do |t|
    t.references  "user_id"
    t.references  "quiz_id"
    t.integer  "score",          default: 0
  end

样本模型关系,共有4个模型,User,Quiz,Question,UserQuiz

  class Quiz < ActiveRecord::Base
    has_many   :questions
    has_many   :user_quizs
    has_many   :users, :through   => :user_quizs
  end

  class User < ActiveRecord::Base
    has_many   :user_quizs
    has_many   :quizs, :through   => :user_quizs
  end

  class Question < ActiveRecord::Base
    belongs_to :quiz
  end

  class UserQuiz  < ActiveRecord::Base
    belongs_to :user
    belongs_to :quiz       
  end

供用户选择,您可以使用radio_button_tag,这里是link to learn