这个问题已经打败了我。 我一直在这一切的周末,但无法弄清楚发生了什么。
当我创建一个新employee
对象,我也想创建多个新ee_pay
使用记录accepts_nested_attributes_for :ee_pay
在我的employee
模型。
创作ee_pay
对新员工的记录是依赖于量company_pay
存在对于该员工属于公司的对象。 因此,在下面的情况下有2个company_pay
对象- >“基本”。[ID:2]和“时间+ 1/2”。[ID:3](在返回before_action
),我想创建一个ee_pay
对于这些对有问题的员工
下面的代码: -
employees_controller.rb
before_action :set_company_pay_types, only: [:new, :update, :edit]
def new
@ee_pay_types = []
@taxable_pays.each do |pt|
@ee_pay_types << @employee.ee_pay.build(company_pay_id: pt.id)
end
end
private
def set_company_pay_types
@taxable_pays = CompanyPay.where(['company_id = ? AND pay_sub_head_id = ? AND description <> ?', current_company.id, 1, "Salary"]).order(:id)
end
def employee_params
params.require(:employee).permit(....[multiple other fields]..., address_attributes:[:id, :line1, :line2, :line3, :line4, :postcode, :country], ee_pay_attributes:[:id, :employee_id, :company_pay_id, :amount, :rate])
end
意见/员工/ _form
<div><strong>Hourly Pay Types</strong></div>
<div class="form_spacer"></div>
<div class="row">
<div class="col-md-3">
<div class="form_indent1"><div class="form_label"><strong>Description</strong></div></div>
</div>
<div class="col-md-3">
<div class="form_indent1"><div class="form_label"><strong>Amount</strong></div></div>
</div>
<div class="col-md-2">
<div class="form_indent1"><div class="form_label"><strong>Units</strong></div></div>
</div>
<div class="col-md-4">
<div class="form_indent1"><div class="form_label"><strong>Rate</strong></div></div>
</div>
<div>
<%= debug @ee_pay_types %>
<% @ee_pay_types.each do |ee_pay| %>
<%= f.fields_for :ee_pay do |builder| %>
<%= builder.hidden_field :company_pay_id %>
<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"><%= builder.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"><%= builder.text_field :rate, class: "number_input" %></div>
<div class="form_spacer"></div><br />
</div>
<% end %>
<% end %>
</div>
</div>
从员工/新输出
当我去创建一个新的雇员记录,我得到了下面的输出ee_pay
对象。 原来的代码复制每一个的格式如下: -
*description* *company_pay_id*
Basic 2
Basic 3
Time & 1/2 2
Time & 1/2 3
它看起来对我来说,这条线@ee_pay_types << @employee.ee_pay.build(company_pay_id: pt.id)
在employees_controller
正在建设两个新的ee_pay
对象(即是在调试输出在上面的图片)。 然后在视图中,它遍历这两个并为每一个,创建了两个新的ee_pay
对象。 我认为这是发生了什么事,但我可能是完全拧干。 我在这个阶段丢失,我不知道如何解决它。
希望有人能指出我如何解决它的正确方向。 这也可能是一件很明显,我失踪。
为寻找谢谢
编辑1
添加模型的要求
车型/ ee_pay
class EePay < ActiveRecord::Base
belongs_to :employee
belongs_to :company_pay
end
模型/ company_pay
class CompanyPay < ActiveRecord::Base
belongs_to :pay_sub_head
belongs_to :company
has_many :ee_pay
end
模型/员工
class Employee < ActiveRecord::Base
belongs_to :company
belongs_to :address
accepts_nested_attributes_for :address
has_many :ee_pay
accepts_nested_attributes_for :ee_pay
end
晏提出的意见改变employee_controller
本
@ee_pay_types = []
@taxable_pays.each do |pt|
@employee.ee_pay.build(company_pay_id: pt.id)
end
和在去掉迭代@ee_pay_types
在视图,其现在看起来像(I改变任何参考ee_pay
到builder
): -
<div>
<%= debug @ee_pay_types %>
<%= f.fields_for :ee_pay do |builder| %>
<%= builder.hidden_field :company_pay_id %>
<div class="col-md-3">
<div class="form_indent1"><div class="form_indent1"><%= builder.company_pay.description %></div></div>
<div class="form_spacer"></div>
</div>
<div class="col-md-3">
<div class="form_indent1"><%= builder.text_field :amount, class: "number_input" %></div>
<div class="form_spacer"></div>
</div>
<div class="col-md-2">
<div class="form_indent1"><%= builder.company_pay.units %></div>
<div class="form_spacer"></div>
</div>
<div class="col-md-4">
<div class="form_indent1"><%= builder.text_field :rate, class: "number_input" %></div>
<div class="form_spacer"></div><br />
</div>
<% end %>
</div>
但是,这给我的错误: -
undefined method `company_pay' for #<ActionView::Helpers::FormBuilder:0x007f47d5649118>
对我来说,它看起来像我无法访问company_pay
中的ee_pay
创建。 任何人任何想法?
编辑2 -解决
让严图片建议的修改之后,我那时能够访问company_pay
中的ee_pay
使用创建builder.object.company_pay.description
。 再次感谢严。