2016-06-12 9 views
1

Ich muss Multi-Step-Formular verwenden, um eine Aufgabe zu erstellen, für die ich böse Edelstein verwenden.Bearbeiten Sie einen Datensatz mit Wicked Gem

assignment_steps_controller.rb

class Teacher::AssignmentStepsController < ApplicationController 
    include Wicked::Wizard 

    steps :initial_information, :choose_questions, :order_questions, :confirmation 

    def show 
    ... 
    render_wizard 
    end 

    def update 
    ... 
    redirect_to next_wizard_path 
    end 
end 

assignment_controller.rb

class Teacher::AssignmentsController < ApplicationController 

    def new 
    @assignment = current_teacher.assignments.new 
    redirect_to teacher_assignment_steps_path(:initial_infomation) 
    end 

    def create 
    render :new 
    end 
end 

Jetzt seine große Arbeit einen Auftrag zu erstellen. Aber mein Problem ist, wie würde ich das gleiche Multi-Step-Formular verwenden, um eine Aufgabe zu bearbeiten?

Antwort

3

Ich habe eine neue Route zum Bearbeiten Link erstellen, es sieht aus wie diese

resources :assignment_steps, only: [:show, :update] # to create 
resources :assignments do 
    resources :assignment_steps, only: [:show, :update] # to edit 
end 

Und nun mein Controller geht so etwas wie diese

class Teacher::AssignmentStepsController < ApplicationController 
    include Wicked::Wizard 

    steps :initial_information, :choose_questions, :order_questions, :confirmation 

    def show 
    case step 
     when :initial_information 
     @assignment = current_assignment 
     build_option_group 
     session[:assignment] = @assignment.attributes if session[:assignment] 
     when :choose_questions 
     @question_ids = session[:question_ids] if session[:question_ids] 
     when :confirmation 
     set_final_assignment 
    end 
    render_wizard 
    end 

    def update 
    case step 
     when :initial_information 
     @assignment = current_assignment 
     @assignment.attributes = assignment_params 
     session[:assignment] = @assignment.attributes 
     redirect_to next_wizard_path 
     when :choose_questions 
     session['question_ids'] = params[:question_ids] 
     redirect_to next_wizard_path 
     when :order_questions 
     # set order of those questions. 
     redirect_to next_wizard_path 
     when :confirmation 
     set_final_assignment 
     flush_session 
     # session[:assignment_id] = @assignment.id 
     render_wizard(@assignment) 
    end 
    end 

    def finish_wizard_path 
    teacher_assignments_path 
    end 

    private 
    def current_assignment 
     params[:assignment_id] ? current_teacher.assignments.find(params[:assignment_id]) : current_teacher.assignments.new 
    end 

    def build_option_group 
     group = [] 
     current_teacher.courses.includes(:sections).each do |c| 
     group << [c.title, c.sections.collect { |s| [s.name, s.id]}] 
     end 
     @options = group 
    end 

    def assignment_params 
     params.require(:assignment).permit(:title, :topics, :post_date, :section_id, :submit_date, :soft_submit) 
    end 

    def get_questions_from_session 
     Question.find(session[:question_ids]) 
    end 

    def set_final_assignment 
     @assignment = current_assignment 
     @assignment.attributes = session[:assignment] 
     @assignment.questions = get_questions_from_session 
    end 

    def flush_session 
     session[:assignment] = session[:question_ids] = nil 
    end 
end 

Denn jetzt alles funktioniert wie erwartet :) .

Verwandte Themen