我已经在这里好几个小时了,但是找不到解决方案,现在想知道我是否正确地处理了这个问题。Rails以嵌套形式创建多个记录
我有一个employee
窗体,并在其中创建多个ee_pay
记录(它们存储对company_pay
类型的引用)。问题是访问与我在表单中创建的ee_pay
关联的company_pay
。
以下作品中的代码,但我一直在_pay_types.html.erb
获得第二@taxable_pays
类型的描述在变量@description
我不能完全肯定为什么发生这种情况。我已经尝试了多种方式来传递每一个的描述。我知道该集合中有两个,因为正确的ID存储在两个单独的ee_pay
记录中,当我提交表单时这些记录会保存。
谁能告诉我如何将每个@taxable_pays.description
的价值传递给视图吗?并告诉我,如果我以最好的方式接近这一点?
感谢您的期待。这里是我的代码:
employees_controller.rb
我有一个before_action是执行以下操作:
@taxable_pays = CompanyPay.where(company_id: current_company.id).order(:id)
然后:
def new
@taxable_pays.each do |pt|
pay_type = @employee.ee_pay.build(company_pay_id: pt.id)
@description = pt.description
end
_form.html.erb
<div class="row">
<div class="col-md-4">
<div class="form_label"><strong>Description</strong></div>
</div>
<div class="col-md-4">
<div class="form_label"><strong>Amount</strong></div>
</div>
<div class="col-md-4">
<div class="form_label"><strong>Rate</strong></div>
</div>
<%= f.fields_for :ee_pay do |builder| %>
<%= render "pay_types", :f => builder %>
<% end %>
</div>
_pay_types.html.erb
<div class="col-md-4">
<div class="form_indent1"><div class="form_indent1"><%= @description %></div></div>
<div class="form_spacer"></div>
</div>
<div class="col-md-4">
<div class="form_indent1"><%= f.text_field :amount, class: "number_input" %></div>
<div class="form_spacer"></div>
</div>
<div class="col-md-4">
<div class="form_indent1"><%= f.text_field :rate, class: "number_input" %></div>
<div class="form_spacer"></div><br />
</div>
编辑1(更新)
我下面的代码马克G.意见后,现在看起来像: -
employees_controller.rb
@pay_types = []
@taxable_pays.each do |pt|
@pay_types << @employee.ee_pay.build(company_pay_id: pt.id)
puts "Debug for the pay_types"
puts @pay_types
end
_form.html。ERB
<div>
<% @pay_types.each do |ee_pay| %>
<%= f.fields_for :ee_pay do |builder| %>
<%= render "pay_types", :f => builder, :ee_pay => ee_pay %>
<% end %>
<% end %>
</div>
_pay_types.html.erb
<%= f.hidden_field :company_pay_id %> (not on original edit)
<div class="col-md-3">
<div class="form_indent1"><div class="form_indent1"><%= ee_pay.company_pay.description %></div></div>
<div class="form_spacer"></div>
</div>
<div class="col-md-3">
<div class="form_indent1"><%= f.text_field :amount, class: "number_input" %></div>
<div class="form_spacer"></div>
</div>
<div class="col-md-2">
<div class="form_indent1"><%= ee_pay.company_pay.units %></div>
<div class="form_spacer"></div>
</div>
<div class="col-md-4">
<div class="form_indent1"><%= f.text_field :rate, class: "number_input" %></div>
<div class="form_spacer"></div><br />
</div>
我本来以为这是每个@pay_types的印刷两次,但看着它再次它是description
印刷每次两次,每次与company_pay_id
s
*description* *company_pay_id*
Basic 2
Basic 8
Time & 1/2 2
Time & 1/2 8
我真的很难过这个。
编辑2
这是控制台输出,当我尝试创建一个新的员工
CompanyPay Load (0.7ms) SELECT "company_pays".* FROM "company_pays" WHERE "company_pays"."id" = $1 LIMIT 1 [["id", 2]]
Rendered employees/_pay_types.html.erb (2.8ms)
Debug in the _form view fields_for
#<EePay:0x007f4130a214a8>
Rendered employees/_pay_types.html.erb (0.5ms)
Debug in the _form view fields_for
#<EePay:0x007f4130a214a8>
CompanyPay Load (0.8ms) SELECT "company_pays".* FROM "company_pays" WHERE "company_pays"."id" = $1 LIMIT 1 [["id", 8]]
Rendered employees/_pay_types.html.erb (2.4ms)
Debug in the _form view fields_for
#<EePay:0x007f4130a1fcc0>
Rendered employees/_pay_types.html.erb (0.7ms)
Debug in the _form view fields_for
#<EePay:0x007f4130a1fcc0>
Rendered employees/_form.html.erb (37.5ms)
Rendered employees/new.html.erb within layouts/application (38.3ms)
我放弃了,晚上我得到。一直看着它太久而且无处可去。谢谢您的帮助。明天再试
“@ pay_types”集合的内容是什么?那个长度是2还是4?你的代码在语法上看起来是正确的,所以我会开始检查你的变量值,看看是什么导致了额外的迭代。你可以在你的控制器中使用'logger.info'来做一些原始的调试。 – 2015-02-08 23:04:14
我调试过'@ pay_types',并且在终端显示有2个对象具有不同的引用'# #'。我在这里把我的头撞到墙上。只是看不到'@ pay_types'中每个对象呈现两次的原因。会显示你生成的HTML是否有用? –
2015-02-08 23:14:59
如果您删除'fields_for'标记,并尝试渲染没有表单字段的部分,那么您是否仍然会重复?如果仍然发生,尝试命名其他部分,看看它是否仍然存在? – 2015-02-08 23:41:10