2013-11-13 3 views
0

Я создал викторину, и мне нужно рандомизировать вопросы для отображения с помощью shuffle, но когда я вызываю следующую функцию для отображения следующего вопроса. порядок вновь перетасовал я просто хочу перетасовать порядок перед началом контроллера и сохранить, что во всех действиях для этого контроллераРандомизировать мою запись в рубине на рельсах

private 
    def shuffle(exam_group_id,student_additional_field_id) 
    questions = Question.find(:all, :conditions => ['exam_group_id=? && student_additional_field_id=?',exam_group_id,student_additional_field_id]).flatten.shuffle 
    end 

Здесь я использую функцию следующего

class AnswersController < ApplicationController 
    def start 
     @user = current_user 
     @student = Student.find_by_admission_no(@user.username) 
     @exam_group = ExamGroup.find_by_id(params[:exam_group_id]) 
     @answer = Answer.new(params[:ans]) 
     @module = params[:student_additional_field] 
     @questions = shuffle(@exam_group,@module) 
     @ques = [] 
     @questions.each do |a| 
      @ques.push a.id unless a.id.nil? 
     end 
     a = @ques[0] 
     @s = 1 
     @ans = Question.find_by_id(a) 
     render(:update) do |page| 
      page.replace_html 'main', :partial => 'ans', :object => @ans 
      page.replace_html 'quespan', :partial => 'ques' 
     end 
     end 
    def next 
     @user = current_user 
     @student = Student.find_by_admission_no(@user.username) 
     @exam_group = ExamGroup.find_by_id(params[:exam_group_id]) 
     @answer = Answer.new(params[:ans]) 
     @answer.answer = params[:answer] 
     unless params[:answer].nil? 
      @answer.visited = 1 
     else 
      @answer.visited = 0 
     end 
     @answer.exam_group_id = @exam_group.id 
     @answer.user_id = @user.id 
     passed_question = params[:passed_question] 
     @answer.questions_id = passed_question 
     @question = Question.find_by_id(passed_question) 
     @module = Question.find_by_sql ["SELECT student_additional_field_id FROM questions WHERE id=#{passed_question}"] 
     student_additional_field_id = @module[0].student_additional_field_id 
     @s = 1 
     @questions = shuffle(@exam_group,student_additional_field_id) 
     @ques = [] 
     @questions.each do |a| 
      @ques.push a.id unless a.id.nil? 
     end 
     a = @ques[0] 
     @answer.modules_id = student_additional_field_id 
      if params[:answer] == @question.is_answer 
      @answer.marks = 1 
      else 
      @answer.marks = 0 
      end 

     if @answer.save 
      @ans = Question.find_by_id(a, :conditions => [' id not in (?)',answered]) 
      @s = @s + answered.count 
      unless @ans.nil? 
      render(:update) do |page| 
       page.replace_html 'main', :partial => 'ans', :object => @ans 
      end 
      else 
      render(:update) do |page| 
       page.replace_html 'main', :partial => 'ans2' 
      end 
      end 
     end 
     end 

пожалуйста, помогите мне

+0

как? я новичок в ROR \ –

+0

Можете ли вы объяснить «следующая функция для отображения следующего вопроса»? – shiva

+0

Здесь я редактирую следующий –

ответ

1

Вы можете передать shuffle семя, которое будет последовательно возвращать результат. Вы можете передать это семя в качестве параметра к вашему действию next. Вы можете узнать больше об этом здесь: Reproduce random array sort

Измените способ shuffle, чтобы принять необязательный аргумент семени, который затем вы можете пройти в своем контроллере, исходя из параметра.

0

В зависимости от того, сколько вопросов есть, я бы перетасовал вопросы в действии начала и сохранил заказ либо в сеансе, либо в скрытом поле в форме вопроса.

@questions = shuffle(@exam_group,@module) 
session[:questions] = @questions.map &:id 
Смежные вопросы