2014-02-06 4 views
0

Я пытаюсь создать сайт стиля мастера, чтобы помочь создать объект.
Каждый шаг пользователя вводит некоторые параметры. Я хочу создать и сохранить объект в БД только тогда, когда все параметры будут представлены на последнем шаге.
Контроллер Rails: как передать параметры между действиями в стиле мастера?

class ExperimentsController < ApplicationController 
    def wizard_step_1 
    render template: "experiments/wizards/step1" 
    end 

    def wizard_step_2 
    render template: "experiments/wizards/step2" 
    end 

    def wizard_step_3 
    binding.pry 
    # how to access params in step 1 & 2 here? 
    end 
end 

View step1 below: 
<%= form_tag(action: 'wizard_step_2') do %> 
    <%= text_field_tag("user_name") %> 
    <%= submit_tag("Next >>") %> 
<% end %> 

View step2 below: 
<%= form_tag(action: 'wizard_step_3') do %> 
    <%= text_field_tag("user_email") %> 
    <%= submit_tag("Next >>") %> 
<% end %> 

Я не размещал информацию о маршруте здесь, так как он протестирован ОК. Когда пользователь посещает step1 и вводит имя пользователя, при отправке управления формой переходит в wizard_step_2 и показывает вид step2. Здесь пользователь вводит адрес электронной почты и при нажатии кнопки отправки кнопки выполняет действие wizard_step_3. Тогда мой вопрос заключается в том, как получить имя пользователя и отправить по электронной почте входы пользователя на предыдущих шагах?

Я думал о gem Wicked, и кешках Rails и т. Д., И более или менее они не отвечают моим потребностям. Есть ли достойный способ сделать это?

ответ

0

не имеют огромный опыт работы с этим, но вы можете быть в состоянии извлечь выгоду из: Wizard Forms Railscast

Я предположил бы, что этот тип установки сохранит step 1, step 2, и т.д. Params в session variables:

class ExperimentsController < ApplicationController 
    def wizard_step_1 
    render template: "experiments/wizards/step1" 
    end 

    def wizard_step_2 
    render template: "experiments/wizards/step2" 

    #Create session vars from step1 
    session[:user][:name] = params[:user_name] 
    end 

    def wizard_step_3 
    binding.pry 

    #Step2 is already passed as params ;) 
    params[:user_name] = session[:user][:name] 
    end 
end 

View step1 below: 
<%= form_tag(action: 'wizard_step_2') do %> 
    <%= text_field_tag("user_name") %> 
    <%= submit_tag("Next >>") %> 
<% end %> 

View step2 below: 
<%= form_tag(action: 'wizard_step_3') do %> 
    <%= text_field_tag("user_email") %> 
    <%= submit_tag("Next >>") %> 
<% end %> 

Я знаю, что этот пример не очень СУХОЙ, но это основа того, на что я начну смотреть. По сути, вы должны иметь возможность сохранять данные между экземплярами объектов, которые полностью поддаются sessions

+1

Спасибо, хранение сеанса, по-видимому, является моим единственным выбором, если я не хочу хранить данные в БД. – user1991452

+0

Или обычные файлы cookie, но это зависит от клиента, а не от сервера. –

Смежные вопросы