Ruby on rails 3 Rails中的多页多模型表单
我正在尝试创建一个使用多个模型的多页表单。我有一个申请人,该申请人有多个地址一对多关系 我希望第一页包含关于申请人的信息,然后第二页包含地址表 这就是我目前的情况: 申请人.rbRuby 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
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解决方案,谢谢你的链接。我希望找到一个可以在我现有的代码上运行的解决方案,因为我觉得我已经接近了。。所以如果有人能帮我修一下就太好了。。再次感谢。。