2012-02-25 60 views
2

我正在嘗試創建使用多個模型的多頁表單。我有一個申請人,這個申請人有多個地址(一對多關係)。Rails中的多頁多模式表格

我想的第一頁包含有關申請人的信息,然後頁面後,要對地址(ES)的形式

這是我的時刻:

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> 
... 

就是這樣。現在我的問題是如下,我想保存地址信息以及申請人信息。我以爲只是說:@ applicant.addresses.new那麼他們將被包括在申請人的會話信息,但他們不是(當我接到的地址頁面,沒有任何領域!)。所以我創建了一個新的會話變量來保存地址信息。但我有一個問題。每次我從一個頁面到另一個頁面(在創建操作中),都會創建一個新的地址字段(及其所有屬性)並將其添加到表單中。所以首先我有一個地址,然後我有2個,等等。我是否以這種錯誤的方式去做?怎樣纔可以有一個多頁的形式,用多個模型(即是相關的),並從一個頁面轉到下一個數據不會被刪除..當直到我最終到達最後一頁,我可以提交(並保存)所有的型號..

我將不勝感激,如果任何人都可以幫助.. 謝謝。

回答

0

你肯定能得到這個工作,但(這取決於你所需要的步數),它可以變得相當令人費解。

您是否考慮在服務器端使用單一的newcreate請求,並使用Javascript將表單分解爲客戶端的多個步驟?看起來這可能會簡單得多。您的Rails應用程序的行爲更像一個標準的REST應用程序,然而,如果您認爲適合客戶端,則可以將其分解。

我沒有用它自己,但一個jQuery插件,像這樣一個應該做的伎倆: http://thecodemine.org/

+0

我沒有試過一個jQuery的解決方案,謝謝你的鏈接。我希望能找到一個能解決我現有代碼的解決方案,因爲我感覺自己越來越接近了..所以如果有人能夠幫助我以某種方式修復它,那將是一件好事。再次感謝.. – user1069624 2012-02-25 18:53:02