gpt4 book ai didi

ruby-on-rails - Ruby on Rails fields_for 在编辑操作中生成太多字段

转载 作者:行者123 更新时间:2023-12-04 06:14:48 25 4
gpt4 key购买 nike

我有一个非常庞大的表单,它本质上是一个五页的销售表单,创建新表单时一切正常。但是当您去编辑新表单时,它会复制字段和值四次,有时甚至七次。我不知道编辑操作是如何工作的,它使用与新操作相同的部分形式。但这是我的 Controller 操作,用于新操作和编辑操作。

此外,并不是每个字段都会发生重复,它似乎只发生在存在 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

我只是不知道为什么它会在编辑操作中生成额外的字段,希望有更多 Rails 经验的人知道这种行为。

谢谢!

编辑:

这是表单的一部分,其中每个 ruby​​ block 呈现 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 %>

最终更新:

好的,所以我需要制作一个单独的编辑表单,它使用一个通用 block 循环遍历数据库。这就是我的组件

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

最佳答案

当您创建父对象 Reference 时,您似乎正在创建多个交易详细信息。默认情况下,当 fields_for 帮助程序用于 has_many 关系时,它将为每个子实例(在本例中为“deal_detail”)重复一次 fields_for block 。

要仅显示正确的实例,只需像这样将您的实例添加到 fields_for,假设您将 deal_detail 实例保存到 @my_deal_detail

<%= f.fields_for :deal_details, @my_deal_detail do |ff| %>

documentation for fields_for 中有更多信息在 'has_many' 下

关于ruby-on-rails - Ruby on Rails fields_for 在编辑操作中生成太多字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10727391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com