better quiz access
This commit is contained in:
parent
cefd8bf131
commit
80403ad02d
@ -18,6 +18,14 @@ class Candidate < ApplicationRecord
|
||||
answers.where.not(answer: nil)
|
||||
end
|
||||
|
||||
def fetch_question qid
|
||||
CandidateQuiz.new(id).fetch_question(qid).first
|
||||
end
|
||||
|
||||
def my_quiz
|
||||
CandidateQuiz.new(id).build_my_quiz
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def generate_test_hash
|
||||
|
30
app/workers/candidate_quiz.rb
Normal file
30
app/workers/candidate_quiz.rb
Normal file
@ -0,0 +1,30 @@
|
||||
class CandidateQuiz
|
||||
attr_reader :candidate_id
|
||||
|
||||
def initialize candidate_id
|
||||
@candidate_id = candidate_id
|
||||
end
|
||||
|
||||
def fetch_question qid
|
||||
raw_quiz(qid).each_with_object([]) { |row, quiz| quiz << CandidateQuizQuestion.new(row) }
|
||||
end
|
||||
|
||||
def build_my_quiz
|
||||
raw_quiz.each_with_object([]) { |row, quiz| quiz << CandidateQuizQuestion.new(row) }
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def raw_quiz qid = nil
|
||||
question = qid.nil? ? "" : " and q.id = #{qid} "
|
||||
sql = "select c.id candidate_id, q.quiz_id, q.id question_id, a.id answer_id, q.sort
|
||||
, q.question, q.category, q.input_type, q.input_options, a.answer
|
||||
, ifnull(a.saved, false) saved, ifnull(a.submitted, false) submitted , a.updated_at
|
||||
from candidates c
|
||||
inner join questions q on q.quiz_id = c.quiz_id
|
||||
left join answers a on a.candidate_id = c.id AND a.question_id = q.id
|
||||
where q.active = true and c.id = #{candidate_id} #{question}
|
||||
order by c.id, q.sort;"
|
||||
ActiveRecord::Base.connection.exec_query(sql)
|
||||
end
|
||||
end
|
56
app/workers/candidate_quiz_question.rb
Normal file
56
app/workers/candidate_quiz_question.rb
Normal file
@ -0,0 +1,56 @@
|
||||
class CandidateQuizQuestion
|
||||
attr_reader :row
|
||||
|
||||
def initialize row
|
||||
@row = row
|
||||
end
|
||||
|
||||
def candidate_id
|
||||
row["candidate_id"]
|
||||
end
|
||||
|
||||
def quiz_id
|
||||
row["quiz_id"]
|
||||
end
|
||||
alias to_i quiz_id
|
||||
|
||||
def question_id
|
||||
row["question_id"]
|
||||
end
|
||||
|
||||
def answer_id
|
||||
row["answer_id"]
|
||||
end
|
||||
|
||||
def question
|
||||
row["question"]
|
||||
end
|
||||
|
||||
def category
|
||||
row["category"]
|
||||
end
|
||||
|
||||
def input_type
|
||||
row["input_type"]
|
||||
end
|
||||
|
||||
def input_options
|
||||
YAML.load(row["input_options"].to_s)
|
||||
end
|
||||
|
||||
def answer
|
||||
YAML.load(row["answer"].to_s) unless row['answer'].nil?
|
||||
end
|
||||
|
||||
def saved
|
||||
row["saved"]
|
||||
end
|
||||
|
||||
def submitted
|
||||
row["submitted"]
|
||||
end
|
||||
|
||||
def updated_at
|
||||
row["updated_at"]
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user