ruby on rails 4 - Wicked Wizard _Totally_ динамический порядок шагов

В предыдущем вопросе я нашел почти то, что мне было нужно: динамический порядок шагов Wicked Wizard

К сожалению, я все еще борюсь со своей проблемой. Я хочу, чтобы у моего Wicked Wizard был полностью динамический порядок шагов (помимо первого шага). Каждый ответ представляет собой элемент базы данных, принадлежащий каждому элементу базы данных вопросов. Я хочу использовать атрибут next_question из ответа, который выбран, чтобы определить, какой шаг будет следующим.

class ExperimentsController < ApplicationController
def create
  @experiment = Experiment.new
  @experiment.save(validate: false)
  redirect_to experiment_steps_path(@experiment, Experiment.steps.first)
end
...
private
  def experiment_params
    params.require(:experiment).permit(:name, :questions, :responses, :form_step)
  end
end



class ExperimentStepsController < ApplicationController
include Wicked::Wizard
before_action :set_steps
before_action :setup_wizard

def show
  @experiment = Experiment.find(params[:experiment_id])
  @next_question = Response.find(params[:next_question])
  jump_to(:next_question)
  render_wizard
end

private

def set_steps
  self.steps = Question.pluck(:name)
end

def response_params
  params.fetch(:response, {}).permit(:next_question)
end

end

1 ответ

Решение

Когда я попробовал подобную стратегию в Rails 3.2 с before_filter это дало мне ошибку, которая предложила мне использовать prepend_before_filter вместо этого, который работал удовольствие. Похоже, что подобный метод существует в Rails 4: prepend_before_action, так что это должно работать для вас. Кроме того, я приведу элементы в виде символов (не строк), так что в вашем случае это будет что-то вроде self.steps = Question.pluck(:name).map(&:to_sym), Надеюсь, это поможет!

Другие вопросы по тегам