Я использую Rails и Wicked Gem для создания многошаговой формы. У меня есть модель Родитель и ребенок. У родителей много детей, и родительская форма acceptpts_nested_attributes_for: children.
Я строю вложенный объект на действии SHOW контроллера, чтобы отображалось поле формы.
По какой-то причине, каждый раз, когда форма сохраняется, количество дочерних элементов в базе данных (и количество полей формы в представлении) удваивается. Сначала это спасет 1 ребенка, как и ожидалось. Затем, если я go вернусь, чтобы обновить эту часть формы и сохранить этот дочерний элемент, он создаст 2 дочерних элементов, затем 4 и т. Д. c.
Вот соответствующий код:
parent.rb
class Parent < ApplicationRecord
belongs_to :user
has_many :children
accepts_nested_attributes_for :children
end
child.rb
class Child < ApplicationRecord
belongs_to :parent
end
parent_steps_controller.rb
class ParentStepsController < ApplicationController
include Wicked::Wizard
steps :spouse, :children
def show
@user = current_user
if Parent.find_by(id: params[:parent_id])
@parent = Parent.find(params[:parent_id])
session[:current_parent_id] = @parent.id
else
@parent = Parent.find_by(id: session[:current_parent_id])
end
@parent.children.build
render_wizard
end
def update
@parent = Parent.find_by(id: session[:current_parent_id])
@parent.update_attributes(parent_params)
render_wizard @parent
end
private
def parent_params
params.require(:parent).permit(:spouse_name, :children_attributes => [:full_name])
end
end
дети. html .erb
<%= form_for(@parent, :url=> wizard_path, :method => :put) do |f| %>
<h1>Children Information</h1>
<%= f.fields_for :children do |child| %>
<div class="field">
<%= child.label :full_name %>
<%= child.text_field :full_name %>
</div>
<% end %>
<%= f.submit "Continue", :class => "btn btn-primary" %>
<% end %>