我的控制器中有以下代码:
class VocabsController < ApplicationController
before_action :require_login, except: [:index, :quiz, :answer, :result]
...
def quiz
#Initiate score session
session[:score] ||= 0
#Initiate session to hold questions already asked
session[:already_asked] ||= []
#Total score
session[:amount_questions] = Vocab.all.length
#Get list of words that hasn't been asked before
@left_words = Vocab.all.where.not(id: session[:already_asked])
#Questions remaining
@questions_remaining = @left_words.length - 4
#Pick four words from leftover words list
@four = @left_words.shuffle.take(4)
#Create question variable if there are enough words left in list
if @left_words.length >= 4
@question = @four.first.word
else
redirect_to result_path
end
#save score to user database if all questions done and logged in
if @questions_remaining == 0
high_score = Score.new
high_score.user_id = session[:user_id]
high_score.score = session[:score] / session[:amount_questions].to_f
high_score.save
redirect_to result_path
end
end
def answer
#Keep score and question id's already asked
if params[:answer] == params[:orig]
session[:score] += 1
session[:already_asked] << params[:answer].to_i
flash[:notice] = "You got it right!"
redirect_to quiz_path
else
session[:already_asked] << params[:orig].to_i
flash[:notice] = "Sorry, wrong answer!"
redirect_to quiz_path
end
end
我有以下型号:
class Vocab < ActiveRecord::Base
validates :word, :definition, presence: true
end
我正在努力学习坚持瘦瘦的控制器胖模型范例,但由于Rails不让会话变量传递给模型,我该如何将其重构为模型?
答案 0 :(得分:0)
我认为在这种情况下,关注胖模特瘦身控制器的最佳方法是为“测验”创建一个模型。然后本身就是测验&#39;会跟踪“词汇”。提问/回答的问题。会话将仅使用会话ID引用测验。你也可以想要破坏这个测验&#39;会话结束后或保留它们进行测验分析...