Думаю, вы можете использовать злой камень для пошагового мастера.
И на первом шаге html-шаблон сохраняет только те поля ввода, которые вам необходимы, а на втором шаге сохраните значения первого шага в скрытом поле, аналогично на третьем шаге вы можете сохранить значения первого и второго шага в скрытом поле.
и в контроллере Просто присвойте значения переменной @request
steps :step_one, :step_two, :step_three
def request_steps
@request = Request.new
@request.assign_attributes(params[:request])
case step
when :step_one
#add code here you want to do in step one
when :step_two
#add code here you want to do in step two
when :step_three
#add code here you want to do in step three
end
render_wizard
end
Альтернативное решение:
Если вы не хотите хранить в скрытом поле и не использовать wicked и выполнять многошаговые действия, тогда другое решение - сохранить входные данные запроса в сеансе, как показано ниже:
def step1
session[:user_request] ||= {}
session[:user_request].merge!{params[request]} #merge input from step1
# render to show step2
end
def step2
session[:user_request] ||= {}
session[:user_request].merge!{params[request]} #merge input from step2
# render to show step3
end
def step3
session[:user_request] ||= {}
session[:user_request].merge!{params[request]} #merge input from step3
# render to login/signup_page
end
и после входа в систему вы можете найти данные запроса с помощью сеанса [: user_request] и сохранить запрос с зарегистрированным пользователем и очистить сеанс [: user_request], как в вашем контроллере сеанса devise
after_filter :after_login, :only => :create
def after_login
if session[:user_request]
request = current_user.requests.build(session[:user_request])
session[:user_request] = nil if request.save
end
end
Надеюсь, это поможет вам.