私は基本的に 5 ページの販売フォームである非常に野獣なフォームを持っていますが、新しいフォームを作成するときはすべて問題ありません。しかし、新しいフォームを編集しようとすると、フィールドと値が 4 回、場合によっては 7 回複製されます。編集アクションがどのように機能しているのかさえわかりません。新しいアクションが使用するのと同じフォーム部分を使用します。しかし、これが new アクションと edit アクションのコントローラー アクションです。
また、重複はすべてのフィールドで発生するわけではなく、has_many
関係があるセクションでのみ発生するようです。
# GET /references/new
# GET /references/new.json
def new
@reference = Reference.new
@user_id = params[:user_id]
@reference.build_customer_overview
@reference.build_solution_description
@reference.solution_description.deal_details.build
component = @reference.components.build
component.servers.build
component.services.build
partner = @reference.build_partner
partner.competitors.build
partner.contacts.build
respond_to do |format|
format.html # new.html.erb
format.json { render json: @reference }
end
end
# GET /references/1/edit
def edit
@reference = Reference.find(params[:id])
@user_id = @reference.user_id
end
レールの経験が豊富な人がその動作を知っていることを期待して、編集アクションで追加のフィールドが生成される理由がわかりません。
ありがとう!
編集:
これは、各ルビ ブロックが 4 回レンダリングされるフォームのセクションです。
<%= f.fields_for :deal_details do |ff| %>
<div>
<%= ff.label :title, 'Customer\'s business/IT needs (why was this solution required)' %>
<%= ff.hidden_field :title, value: 'business/IT needs' %>
<br />
<%= ff.text_area :content %>
</div>
<% end %>
<%= f.fields_for :deal_details do |ff| %>
<div>
<%= ff.label :title, 'Description of solution: (including product/services information)' %>
<%= ff.hidden_field :title, value: 'Description of solution' %>
<br />
<%= ff.text_area :content %>
</div>
<% end %>
<%= f.fields_for :deal_details do |ff| %>
<div>
<%= ff.label :title, 'Measurable anticipated benefits to the client and/or it\'s end customers: (i.e. this does NOT mean "benefits to")' %>
<%= ff.hidden_field :title, value: 'Measurable benefits' %>
<br />
<%= ff.text_area :content %>
</div>
<% end %>
<%= f.fields_for :deal_details do |ff| %>
<div>
<%= ff.label :title, 'Why won? (and why any competitors failed)' %>
<%= ff.hidden_field :title, value: 'Why won?' %>
<br />
<%= ff.text_area :content %>
</div>
<% end %>
最終更新:
わかりましたので、1 つの汎用ブロックを使用して DB をループする編集用の別のフォームを作成する必要がありました。これは私がコンポーネントのために持っているものです
<fieldset>
<% title = f.object.component_title %>
<h3><%= f.object.component_title %></h3>
<%= f.fields_for :servers do |fff| %>
<% if title == 'psg' %>
<%= render 'psg_fields', f: fff %>
<% end %>
<% if title == 'servers' %>
<%= render 'server_fields', f: fff %>
<% end %>
<% if title == 'storage' %>
<%= render 'storage_fields', f: fff %>
<% end %>
<% if title == 'ipg' %>
<%= render 'ipg_fields', f: fff %>
<% end %>
<% if title == 'software' %>
<%= render 'software_fields', f: fff %>
<% end %>
<% if title == 'services' %>
<%= render 'service_fields', f: fff %>
<% end %>
<% if title == 'financial' %>
<%= render 'financial_fields', f: fff %>
<% end %>
<% end %>
<%= link_to_add_fields "Add Server", f, :servers, :servers %>
</fieldset>