我有一个表单,我想同时创建一个父记录和一个子记录。举一个简单的例子,让我们说一个公司与第一名员工。Rails的复杂形式
在我的控制器我做这样的事情:
def new
@company = Company.new
@company.employees.new
end
,这在我看来:
<%= form_for(@company) do |form| %>
<div>
<%= form.label :name %>
<%= form.text_field :name %>
</div>
<%= form.fields_for :employees do |employee_form| %>
<div>
<%= employee_form.label :name %>
<%= employee_form.text_field :name %>
</div>
<% end %>
<% end %>
,并回到我的控制器再次:
def create
@company = Company.new(params[:company])
@company.employees << Employee.new(params[:company][:employees_attributes]["0"])
# save stuff
end
问题1:
我无法获得公司员工集合中填入的表单中创建的单个员工。当我查看参数时,我发现[:employees_attributes] [“0”]的东西。
我有什么工作,但有没有更干净的方法来做到这一点?
问题2:
如果验证未通过的员工,我得到一个通用的“员工是无效的”,而不是需要的名称验证消息。我得到我打电话保存在收集和轨道正在尽最大努力冒出一个验证错误,但有没有一种更清洁的方式来做到这一点,所以我可以得到特定于员工的错误?
在短期
如何清洁这件事使相关模型从PARAMS自动创建的,所以我得到的验证消息的一个员工。
感谢您的期待。
感谢您的回应。我已经在父模型中设置了accep_nested_attributes_。我已经有了一个部分,它的作用是model.errors.full_messages.each,我得到的是“Employees is invalid”,而不是“Name不能为空”。在阅读两者之间的细微差别后,关于构建的建议很有意义,谢谢。在寻求帮助之前,我已经观看了Railscasts。不知道我留下的是什么,其他任何想法都会很棒,但不知道我能从我的结局中得到什么。再次感谢。 – blu
我的确涵盖了这些要点,但也许我所说的不够清楚。我会更新我的答案,使其更清晰 – jamesc
@blu - 我已更新我的答案,希望您现在可以看到如何使用我给你的信息 – jamesc