2012-02-25 2 views
2

Я пытаюсь создать многостраничную форму, использующую несколько моделей. У меня есть заявитель, и у этого заявителя имеется более одного адреса (от одного до многих).Многостраничная многомодульная форма в рельсах

Я хотел бы первую страницу, содержащую информацию о заявителе, а затем страницу после этого иметь форму для адреса (ов)

Это то, что я имею на данный момент:

applicant.rb

has_many :addresses, :dependent => :destroy  
accepts_nested_attributes_for :addresses 

address.rb

belongs_to :applicant 

Applica nts_controller.rb:

def new 
    session[:applicant_params] ||= {} 

    @applicant = Applicant.new(session[:applicant_params]) 
    2.times do 
    @[email protected] 
    end 

    session[:address_params] = @addresses.attributes 

end 

def create 

    session[:applicant_params].deep_merge!(params[:applicant]) if params[:applicant] 
    session[:address_params] ||= params[:address] 
    @applicant = Applicant.new(session[:applicant_params]) 
    @applicant.addresses.new(session[:address_params]) 



    if params[:forward_button] or params[:back_button] 


    @applicant.current_step = session[:applicant_step] 

    if params[:back_button] 
    @applicant.previous_step 
    else 
    @applicant.next_step 
    end 

    session[:applicant_step][email protected]_step 

    render "new" 

else 

..... 

В новом представлении:

<%= form_for @applicant do |f| %> 

    <%= render "#{@applicant.current_step}_step", :f => f %> 
    <p><%= f.submit "Continue", :name => "forward_button" unless @applicant.last_step? %> </p> 
    <p><%= f.submit "Back", :name => "back_button" unless @applicant.first_step? %></p> 


<% end %> 

@ applicant.current_step будет либо address_step или applicant_step, и они находятся ниже:

_applicant_step.html.erb

<div class="field"> 
<%= f.label :first_name %><br /> 
<%= f.text_field :first_name ,:width=>'10px', :size=>"20", :maxlength=>"20" %> 
</div> 
<div class="field"> 
<%= f.label :middle_name %><br /> 
<%= f.text_field :middle_name %> 
</div> 
.... 

_address_step.html.erb

<%= f.fields_for :addresses do |u| %> 
<div class="field"> 
    <%= u.label :address %><br /> 
    <%= u.text_area :address , :cols=> 20, :rows=>5%> 
</div> 
<div class="field"> 
    <%= u.label :telephone, "Telephone Number" %><br /> 
    <%= u.text_field :telephone %> 
</div> 
... 

И все. Теперь проблема заключается в следующем: я хочу сохранить информацию о адресе, а также информацию о заявителе. И я подумал, просто сказал: @ заявитель.addresses.new, тогда они будут включены в информацию о сессии заявителя, но они не были (когда я получил адресную страницу, не было полей!). Поэтому я создал новую переменную сеанса для хранения адресной информации. Но у меня проблема. Каждый раз, когда я перехожу с одной страницы на другую (в действии create), создается новое поле адреса (со всеми его атрибутами) и добавляется в форму. Так что сначала у меня есть один адрес, потом у меня 2 и так далее. Неужели я ошибаюсь? Как я могу создать многостраничную форму с несколькими моделями (которые связаны), а при переходе с одной страницы на другую данные не стираются. Пока я не дойду до последней страницы, где я мог бы отправить (и сохранить) все модели ..

Я был бы признателен, если любой поможет. Спасибо.

ответ

0

Вы можете, конечно, получить эту работу, но (в зависимости от количества шагов, которые вам нужны), она может стать довольно запутанной.

Считаете ли вы использование одного запроса new и create на стороне сервера и используя Javascript для разбивки формы на несколько этапов на стороне клиента? Похоже, это может быть намного проще. Ваше приложение Rails будет вести себя как стандартное приложение REST, и вы можете разбить его, но вы сочтете нужным на стороне клиента.

Я не использовал его сам, но плагин JQuery, такие, как этот должен сделать трюк: http://thecodemine.org/

+0

Я не пробовал решение Jquery, спасибо за ссылку. Я надеялся найти решение, которое будет работать над моим существующим кодом, потому что я чувствую, что приближаюсь ... так что было бы здорово, если бы кто-нибудь мог мне помочь в этом как-то .. спасибо еще раз .. – user1069624

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