2017-11-03 5 views
-1

Sie sagen, dass ein Schienen-Paradigma ist, sich nicht zu wiederholen, oder "DRY". Also arbeite ich an dieser Quiz-App, und jetzt, wo ich langsam verstanden habe, wie MVC etwas funktioniert und wie alles zusammenkommt, möchte ich besseren Code schreiben. Also lassen Sie sich dieses Beispiel nehmen, die ich habe früher von meinem Schema:Was ist eine effizientere Art, dieses Rails-Quizmodell zu strukturieren?

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 

Wie Sie sehen können, answer_choice, dann Zugabe von _2, _3, _4, _5 und correct_answer_choice scheint sehr hässlich und ineffizient zu mir. Was, wenn ich einen Beitrag hinzufügen möchte, der nur zwei Antwortmöglichkeiten hat? Oder drei? Vielleicht mehr?

Was wäre ein besserer Weg dies zu tun, so dass es anpassungsfähiger und flexibler ist?

+0

Wenn dieser Code funktioniert, könnte diese Frage besser auf CodeReviewSE gestellt werden, vorausgesetzt, es erfüllt die restlichen Kriterien für das Stellen einer Frage (mit denen ich nicht vertraut bin). – Lexi

+0

Setzen Sie alle Antworten in eine 'JSON'-Spalte mit dem Namen' Antworten' –

+0

@NickM, aber ich verwende JSON nicht in meiner Rails-App? – mazing

Antwort

2

Es wäre einfacher mit nur given_answer und correct_answer Spalten in Ihrer Tabelle per Post. Für Ihre given_answer Spalte können Sie options_for_select verwenden, um die Auswahl in Ihrem Formular anzuzeigen:

options_for_select([ "Choice1", "Choice2", etc... ]) 

Nach der Einreichung Sie dann if correct_answer == given_answer abfragen können, um zu sehen, ob die beiden Werte übereinstimmen.

Verwandte Themen