Ruby on rails 3 Rails中的多页多模型表单

Ruby on rails 3 Rails中的多页多模型表单,ruby-on-rails-3,forms,models,one-to-many,multipage,Ruby On Rails 3,Forms,Models,One To Many,Multipage,我正在尝试创建一个使用多个模型的多页表单。我有一个申请人,该申请人有多个地址一对多关系 我希望第一页包含关于申请人的信息,然后第二页包含地址表 这就是我目前的情况: 申请人.rb has_many :addresses, :dependent => :destroy accepts_nested_attributes_for :addresses address.rb belongs_to :applicant 申请人(u controller.rb): def new

我正在尝试创建一个使用多个模型的多页表单。我有一个申请人,该申请人有多个地址一对多关系

我希望第一页包含关于申请人的信息,然后第二页包含地址表

这就是我目前的情况:

申请人.rb

has_many :addresses, :dependent => :destroy     
accepts_nested_attributes_for :addresses
address.rb

belongs_to :applicant
申请人(u controller.rb):

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

  @applicant = Applicant.new(session[:applicant_params])
  2.times do
    @addresses=@applicant.addresses.build
  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]=@applicant.current_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 %>
@申请人。当前的申请人步骤将是地址步骤或申请人步骤,如下所示:

_申请人_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>
....
<%= 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>
...
_地址_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>
....
<%= 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>
...
就这样。现在我的问题如下,我想保存地址信息以及申请人信息。我想只要说:@applicator.addresses.new,它们就会包含在申请者的会话信息中,但当我获得地址页面时,它们没有,没有字段!。所以我创建了一个新的会话变量来保存地址信息。但我有个问题。每次我在创建操作中从一个页面转到另一个页面时,都会创建一个新的地址字段及其所有属性,并将其添加到表单中。首先我有一个地址,然后我有两个地址,依此类推。我走错方向了吗?我怎样才能有一个多页表单,有多个相关的模型,当从一页转到下一页时,数据不会被擦除。。直到我最终到达可以提交并保存所有模型的最后一页

如果有人能帮忙,我将不胜感激。。
谢谢。

您当然可以让它工作,但根据您需要的步骤数量,它可能会变得非常复杂

您是否考虑过在服务器端使用单个new和create请求,并在客户端使用Javascript将表单分解为多个步骤?看起来这可能要简单得多。Rails应用程序的行为将更像一个标准的REST应用程序,您可以在客户端随意分解它

我自己也没有使用过,但是像这样的jQuery插件应该可以做到:

您当然可以让它工作,但根据您需要的步骤数量,它可能会变得非常复杂

您是否考虑过在服务器端使用单个new和create请求,并在客户端使用Javascript将表单分解为多个步骤?看起来这可能要简单得多。Rails应用程序的行为将更像一个标准的REST应用程序,您可以在客户端随意分解它

我自己也没有使用过,但是像这样的jQuery插件应该可以做到:

我还没有尝试过jquery解决方案,谢谢您的链接。我希望找到一个可以在我现有的代码上运行的解决方案,因为我觉得我已经接近了。。所以如果有人能帮我修一下就太好了。。再次感谢..我还没有尝试jquery解决方案,谢谢你的链接。我希望找到一个可以在我现有的代码上运行的解决方案,因为我觉得我已经接近了。。所以如果有人能帮我修一下就太好了。。再次感谢。。