他们说铁轨范例是不重复自己,或“干”。所以我正在研究这个测验应用程序,现在我已经慢慢了解MVC如何工作以及如何将它们组合在一起,我想编写更好的代码。那么让我们从我的架构中做到的这个例子:
create_table "posts", force: :cascade do |t|
t.text "title"
t.text "text"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "user_id"
t.text "answer_choice"
t.text "answer_choice_2"
t.text "answer_choice_3"
t.text "answer_choice_4"
t.text "answer_choice_5"
t.text "correct_answer_choice"
t.string "slug"
t.index ["slug"], name: "index_posts_on_slug", unique: true
end
正如你所看到的,answer_choice,然后添加_2,_3,_4,_5和correct_answer_choice对我来说似乎非常难看和低效。如果我想添加一个只有两个答案选项的帖子怎么办?还是三个?也许更多?
什么是更好的解决方法,以便更具适应性和灵活性?
答案 0 :(得分:2)
每个帖子的表格中只有given_answer
和correct_answer
列会更简单。对于given_answer
列,您可以使用options_for_select
在表单中显示选项:
options_for_select([ "Choice1", "Choice2", etc... ])
提交后,您可以查询if correct_answer == given_answer
以查看这两个值是否匹配。